Serwowanie poprawnego XHTMLa

Za sprawą znajomego trafiłem na artykuł PornelaIrracjonalne uwielbienie dla XHTML” Wszystkich zachęcam do zapoznania się z tymi materiałami. 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.

XHTML powinien być serwowany przez serwer jako application/xhtml+xml.
Wysyłanie niepoprawnego XHTML jest gorsze niż wysyłanie niepoprawnego HTML.

Jeśli nie zadbasz o poprawny MIME Type dla XHTML to, po co w ogóle tworzysz strony w tym trybie, skoro strona taka zostanie potraktowana jako HTML. Nie lepiej zostać wtedy przy HTMLu?

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 XHTMLa, tym samym wysyłając w sieć sieczkę niepoprawnych tagów.

To nic, ze strona przechodzi poprawnie walidacje 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, żaden kod w pliku tego nie zmieni.

Pornel zaprezentował prosty test, wstawmy w kod „naszego poprawnego XHTMLa” 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 nie rozumie IE i bot Google, dlatego to może sprawiać trudność lub być przeszkodą w zapewnieniu poprawnego standardu do końca naszym stronom.

Jak zatem zagwarantować poprawny MIME Type dla XHTML zależnie od możliwości poprawnego obsłużenia XHTMLa przez klienta?
Dla zdolnych obsłużyć poprawnie XHTML serwujemy pliki jako application/xhtml+xml, a dla reszty jako text/html.

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 typ MIME plików XHTMLowych, aby nie zaśmiecać sieci sieczką błędnych tagów ;)
W wolnym czasie będę sukcesywnie istniejące już strony dostosowywał do tego.

5 przemyśleń nt. „Serwowanie poprawnego XHTMLa”

  1. 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?

  2. Kod ten nie odroznia czy to IE i bot, ale na podstawie wyslanych przez klienta informacji w naglowkach o akceptowanych formatach wysyla odpwiedni tym MIME. Widocznie googlowski bot w akceptowanych formatach nie wspomina o poprawnym akceptowaniu application/xhtml+xml ;)

    Odnosnie kodowania, to mysle, ze meta mozna pozostawic, w koncu wiekszy priorytet dla XHTMLa maja naglowki, a w przypadku HTMLa nie bedzie problemu z krzaczkami.

    Naglowki HTTP maja najwiekszy priorytet, wiec jesli poprawnie wysle sie informacje o kodowaniu, to meta mozna olac i nie bedzie porblkemow z krzaczorami ;)
    Na /docs tak mam i problemow jeszcze nie zauwazylem ;)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *