Xpoint
   [напомнить пароль]

Отдаём правильный заголовок Content-Type для XHTML

Постановка проблемы

Как учит нас W3C, XHTML документы следует отдавать с MIME-типом application/xhtml+xml. Apache в курсе этого и отдаёт файлы с расширением .xhtml и .xht именно с таким MIME-типом. Но IE не умеет правильно обрабатывать файлы такого типа и вместо открытия предлагает сохранить их на диск. Итак, хочется, чтобы для IE файлы с расширением .xhtml отдавались с MIME-типом text/html, а всем остальным с application/xhtml+xml.

Решение

К счастью, браузеры информируют нас о своих возможностях в HTTP-заголовке Accept (RFC2616(ietf) 14.1). В частности мы можем отследить, принимает ли браузер application/xhtml+xml и на основании этого выдать нужный заголовок Content-Type.

Решение для Apache 1.3 с использованием mod_rewrite выглядит следующим образом:

RewriteEngine on
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml [OR]
RewriteCond %{HTTP_ACCEPT} "application/xhtml\+xml *; *q=0"
RewriteRule \.xhtml$ - [T=text/html]

Поскольку по умолчанию для .xhtml-файлов MIME-тип application/xhtml+xml, мы проверяем есть ли в заголовке Accept такой тип и, если нет, заменяем тип на text/html.

TODO: написать способ для Apache 2 с использованием mod_header и mod_setenvif.
TODO: написать способ для ASP .NET 2.0 и поставить тут линк на статью.

Powered by POEM™ Engine Copyright © 2002-2005