Trable s MIME typem XHTML
Že se podle normy má XHTML 1.0 posílat s MIME typem application/xhtml+xml
je notoricky známé. Že se XHTML 1.1 s tímto typem posílat musí je rozšířené mínění, pro které jsem však nenašel jednoznačnou oporu. Že se Internet Explorer s tímto typem dokumentu neumí vypořádat a místo zobrazení nabídne jeho stažení nebo spuštění, se také dávno ví. Že si prohlížeče, které application/xhtml+xml
umí zobrazit, o něj říkají pomocí HTTP hlavičky Accept
a že MSIE tento typ v hlavičce Accept
kupodivu správně neuvádí a že tudíž lze pomocí jednoduchého skriptíku posílat stránku každému browseru podle jeho možností, se rozebíralo mnohokrát.
Že tu přesto může vznikat nějaký problém jsem začal tušit poměrně nedávno, kdy si nějaký uživatel s MSIE stěžoval, že se mu stránka, kterou hyperkorektně (leč nejspíš celkem zbytečně) servíruji všem slušným prohlížečům jako application/xhtml+xml
, nezobrazí, nýbrž nabízí se ke stažení. V ten momenet mi naskákaly mi pupínky a zatrnul jsem, co pro nás velký Bill zase přichystal za překvapení, jestli k nějaké nové várce záplat starého vraku Internet Exploreru přibalil úžasnou bugofíčuru, která způsobuje, že si dotyčný browser říká o dokumenty, které neumí zpracovat, nebo co se sakra děje. Vzhledem k tomu, že jsem s dotyčným uživatelem neměl žádný přímý kontakt a více se jich neozvalo, zařadil jsem problém do škatulky „nevysvětlené podivnosti“, pečlivě zašpuntoval a odložil k ledu.
Naštěstí tam nezůstal dlouho. Chlubil jsem se dneska Frodovi s webem Ave Bicycle Tours, který jede na mém enginu (ne, nechvalte mě, design dělala má kámoška Tereza Mikušová) s tím, že grafika je v pořádku jenom v rozumných browserech, an MSIE neumí poloprůhledné PNG. Frodo tedy spustil Explorer, by se podíval, jak mu ten skvostný výtvor zprzní a hle, stránka se mu nabídla ke stažení. Po chvíli laborování jsme zjistili, že v browseru chyba není, hlavičky posílá správné, přesto se mu však stránky servírují se špatným typem. Zrada. Co je špatně?
Modří už jistě vědí, mně to však chvíli trvalo. Ano, na vině byla jako obvykle proxy keš. Stránky Ave Bicycle Tours se jako každý správný web kešují, jenomže při prvním požadavku z Mozilly se v proxy uložily s MIME typem application/xhtml+xml
a když si o ně potom řekl Internet Explorer, proxy mu je samozřejmě podstrčila ve stejném balení, v jakém je poprvé dostala.
Oč obtížnění bylo nalezení problému, o to snazší je řešení: stačí posílat dokument s HTTP hlavičkou Vary: Accept
, která způsobí, že proxy předá každému co jeho jest, a je po problému. Pro péhápéčkáře:
<? header ("Vary: Accept"); ?>
Jak prosté, milý Watsone.
A Chamurappi se teď nám, vyznavačům boha jediného, jistě směje pod fousy, máte co jste chtěli, kdybyste se starali o to, co funguje a ne jaká je jedině správná hlavička, mohli jste místo řešení uměle vyrobených problémů radši udělat nějaký pěkný webík. Na druhou stranu jsem alespoň zjistil, že existuje Vary:
a ještě několik dalších užitečných HTTP hlaviček, které jsem sice nikdy nepotřeboval, ale možná jednou budu.
Co vy na to?
[1] Vyjednávání obsahu
Mates, to je ale jedna ze základních věcí HTTP komunikace - pokud jakýmkoliv způsobem dodáváš obsah selektivně dle HTTP hlavičky požadavku (browser, jazyk, obsah, komprese...), je potřeba toto vyznačit i hlavičkou Vary. Ačkoliv jsem o ní do loňska také nevěděl ;)
[2] Vary & Webylon
Kešování se musí podřídit i Webylon, koneckonců sám používá Vary: User-Agent (http://www.webylon.info/S03.cs.aspx).
Je tady ještě jedno nebezpečí: určité Vary + IE způsobí, že se na úrovni prohlížeče nekešuje vůbec nic (samozřejmě chyba IE). Tuším jde o Vary: Host. Naštěstí se zdá se, že Vary: Accept se chová korektně.
[3]
[1] No jo, člověk se pořád učí. Někteří přitom navíc ještě zvládnou objevit Ameriku ;-)
[5] Mohl by mi někdo poslat kus kódu, jak to máte celkově řešený?
Mohl by mi prosím někdo poslat kus kódu, abych věděl, jak to má bejt celý řešený? Nebo alespoň odkaz někam, kde to je popsaný. Díky
Aktuální Seky
- Truhlářství Švagr – kvalitní dřevěná okna a dveře – Hledáte-li kvalitní dřevěná eurookna nebo vchodové či interiérové dveře, Truhlářství Švagr je správnou volbou.