Serwowanie poprawnego XHTMLa
• tech • 427 słów • 3 minuty czytania
Za sprawą znajomego trafiłem na artykuł Pornela “Irracjonalne uwielbienie dla XHTML” Wszystkich zachęcam do zapoznania się z tym materiałem. Mnie osobiście skusiło to do kilku refleksji ;)
XHTML nie jest następcą HTML. XHTML i HTML to ten sam język przedstawiony na dwa sposoby — jako XML i SGML. Ich semantyka nie różni się nic a nic, bo krótka specyfikacja XHTML 1 zawiera tylko opis różnic związanych ze składnią, a we wszystkich pozostałych kwestiach odsyła do HTML 4.
Dokument XHTML powinien być serwowany przez serwer jako application/xhtml+xml.
Wysyłanie niepoprawnego XHTML jest gorsze niż wysyłanie niepoprawnego HTML! Jeśli nie umiesz zadbać o poprawny MIME Type dla XHTML-a to po co w ogóle tworzysz strony w tym trybie, skoro taka strona zostanie potraktowana jako HTML? Nie lepiej zostać wtedy przy HTML-u?
Jeśli nie jesteś w stanie zagwarantować, że Twój kod będzie zawsze poprawny, to nie używaj XHTML w ogóle. Półśrodki jak wysyłanie “XHTML” jako HTML tylko zaśmiecają sieć.
Nawet Riddle, pisząc i propagując standardy sieciowe, nie dba o poprawne serwowanie XHTML-a, tym samym wysyłając w sieć sieczkę niepoprawnych tagów.
To nic, że strona przechodzi poprawnie walidację XHTML, walidator W3C nie sprawdzi wielu istotnych rzeczy. Poprawny DOCTYPE i deklaracje XML niczego nie zmienią. Typ pliku określają tylko i wyłącznie nagłówki serwera i żaden kod w pliku tego nie zmieni.
Pornel zaprezentował prosty test - wstawmy w kod “naszego poprawnego XHTMLa” poniższy fragment…
<p style="color:green"><span style="color:red" />
Jeśli ten tekst jest czerwony, to strona jest pełnym błędów HTML, a nie XHTML.</p>
… i zobaczmy wynik.
Poprawnego serwowania XHTML niestety nie rozumie IE i bot Google. To może sprawiać jakąś trudność lub być przeszkodą w zapewnieniu w pełni poprawnego standardu naszym stronom.
Jak zatem zagwarantować poprawny MIME Type dla XHTML zależnie od możliwości poprawnego obsłużenia XHTML-a przez klienta? Dla user-agentów zdolnych obsłużyć poprawnie XHTML serwujemy pliki jako application/xhtml+xml, a dla reszty jako text/html.
Łatwo możemy to uzyskać poprzez wysłanie odpowiednich nagłówków HTTP (w przypadku stron dynamicznych) stosując odpowiedni kod PHP, który można znaleźć w notce Content Negotiation - raz a dobrze Doktora No. (jedyny poprawny kod, uwzględniający wszelkie różnice i problemy).
Lub za pomocą mod_rewrite (dla stron statycznych):
RewriteEngine on
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} (\.html|\.htm)$
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule .* - [T=application/xhtml+xml]
Moje dotychczasowe doświadczenia były takie, iż wiedząc o problemie, ale ze względu na problemy IE, wszelki XHTML serwowałem jako text/html. Od dziś postaram się, gdzie to tylko możliwe w swoich stronach (prywatnych), dbać o prawidłowy mime-type plików XHTML-owych, aby nie zaśmiecać sieci sieczką błędnych tagów ;)
W wolnym czasie będę sukcesywnie istniejące już strony do tego dostosowywał.
Komentarze (4)
Brawo Mal ^^ nie na darmo sie na tlenie tworzyłem widze :D
Hmm, a w jakim sensie bot Google nie rozumie application/xhtml+xml?
Przed chwilą sprawdziłem, kod Doktora No. podaje botu google text/html, ale to jeszcze nic nie znaczy. A zastanawiam się, bo np. application/atom+xml bardzo chętnie wsysają boty. Aż sprawdzę doświadczalnie.
ps. odnośnie skryptu Doktora No. Jeżeli tylko nim serwujemy kodowanie znaków to IE lubi je zgubić. Pomaga ustalenie w meta, ale może ktoś zna lepsze rozwiązanie?
Kod ten nie odróżnia czy to IE i bot, ale na podstawie wysłanych przez klienta informacji w nagłówkach o akceptowanych formatach wysyła odpowiedni typ MIME. Widocznie googlowski bot w akceptowanych formatach nie wspomina o poprawnej obsłudze application/xhtml+xml ;)
Odnośnie kodowania, to myślę, że meta można pozostawić, w końcu większy priorytet dla XHTMLa mają nagłówki, a w przypadku HTMLa nie będzie problemu z krzaczkami.
Nagłówki HTTP mają największy priorytet, więc jeśli poprawnie wyśle się informacje o kodowaniu to meta można olać i nie będzie problemów z krzaczorami… Na
docs.malcom.pltak mam i problemów jeszcze nie zauważyłem ;)Kolejny przydatny materiał! Dzięki!