Kontynuacja tematyki XHTMLa w odniesieniu do ostatniej notki o poprawnym serwowaniu tego formatu.
Uznałem, a raczej obecnie uznaję tylko XHTML 1.0 Strict i XHTML 1.1, innymi specyfikacjami się bawił już nie będę :P
Ale nie o tym miała być mowa, lecz znów o MIME type.
Obecnie większość serwerów ma zdefiniowany odpowiedni typ dla plików z rozszerzeniem .xhtml, które serwowane są jako application/xhtml+xml. Dlatego doszedłem do wniosku, że będę unikał pakowania XHTMLa (1.1) w pliki .html/htm. oraz wykorzytywał odpowiednie pliki wedle ich przeznaczenia ;)
Mógłbym, wiec zapomnieć o problemie mime type w statycznych stronach.
Mógłbym, gdyby nie IE i inne przeglądarki nieznające i nieakceptujące XHTML.
Dlatego dalej muszę się "bawić" w "content negotation", ale tym razem na plikach .xhtml.
Czemu akurat na tych plikach?
W końcu, w niedalekiej przyszłości standard XHTML przejmie władzę i wszystko będzie piękne i proste (chyba), a moje strony będę na ten dzień przygotowane, wygramy ta wojnę :P
Wracając do teraźniejszości, muszę chociaż zadbać o to, żeby IE nie próbował pobierać mojej strony XHTML, ale próbował ja jakoś wyświetlić, choćby jako text/html.
Wiem, ze XHTML 1.1 powinien być serwowany tylko i wyłącznie jako application/xhtml+xml, ale moim zdaniem lepiej, aby inne nie akceptujące go przeglądarki wyświetliły go chociaż jako HTML, niż żeby go olały sikiem prostym, przynajmniej do czasu, gdy IE zacznie sobie z nim dobrze radzić
Poniższy fragment pliku .htaccess załatwia sprawę, serwowania statycznych stron .xhtml dla nie akceptujących go klientów jako text/html:
# aby serwowac dla nieobslugujacych jako text/html AddType text/html xhtml # defaultowe kodowanie AddDefaultCharset utf-8 RewriteEngine on RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0 RewriteCond %{THE_REQUEST} HTTP/1\.1 RewriteRule \.xhtml$ - [T=application/xhtml+xml] |
Ustawienie domyślnego kodowania na UTF-8 jest wymagane, aby zawartość text/html nie uraczyła nas krzaczkami, ponieważ nasz plik, zgodnie z specyfikacja XHTMLa, nie zawiera nie zgodnych, przestarzałych tagów meta.
Dodatkowo, lepiej, żeby to było UTF-8, bo wtedy możemy pominąć prolog XML w naszej stronie XHTML, który sprawiłby problem IE, zmuszając ją do przejścia w tryb quirks mode i wtedy nawet nasz XHTML renderowany jako HTML w ogóle nie trzymałby się standardów CSS.
Tymi prostymi zabiegami, mamy w pełni zgodny XHTML, który dodatkowo nie jest odrzucany przez przestarzale i nieakceptujące tego standardu przeglądarki i programy kliencie.
Jedynym mankamentem jest to, że nie możemy używać xmlowego dołączania CSS, tylko pozostać przy <link ...> w nagłówku head. Coś za coś ;)
Oczywiście przy dynamicznych stronach możemy zadbać o każdy szczegół, ale notka miała dotyczyć problemu w statycznych stronach.