Все что ты знал о XHTML — неправда

Подготовили: Татьяна и Александр Головко Дата публикации: 06.03.2011

Почему MIME-типы так важны? Почему я продолжаю возвращаться к ним? Ответом будут три слова: драконовская обработка ошибок. В HTML браузеры многое прощали. Если ты создал страницу HTML, но забыл присвоить <title>, браузер в любом случае отобразит страницу, даже несмотря на то, что тег <title> является обязательным в каждой версии HTML. Некоторые теги нельзя вставлять внутрь других тегов, но если на твоей странице они все-таки будут вставлены, браузер все равно постарается отобразить это (как получится) и пойдет дальше, не выдавая сообщения об ошибке.

Как и следовало ожидать, тот факт, что «битая» HTML-разметка все равно отображается в веб-браузерах привел к тому что появились небрежно созданные битые HTML-страницы. Очень много битых страниц. По некоторым оценкам, более чем 99 процентов страниц в сегодняшнем вебе содержат, по крайней мере, одну ошибку. Но из-за того, что эти ошибки не вызывают у браузеров никаких сообщений, их никто не исправляет.

W3C увидел в этом основную проблему Web и принялся исправлять ее. XML, опубликованный в 1997 году, нарушил традицию щадящего отношения к ошибкам и предписал всем программам, читающим XML, рассматривать ошибки форматирования как фатальные. Эта концепция остановки на первой же ошибке стала известна как «драконовская обработка ошибок», от греческого законодателя Драконта, который предавал людей смертной казни за относительно незначительные нарушения его законов. Когда W3C переформулировала HTML в XML термины, ответственные люди постановили, что ко всем документам, которые будут передаваться с MIME-типом application/xhtml+xml будет применяться «драконовская обработка ошибок». Если страница XHTML содержит хотя бы одну ошибку, у браузера не будет другого выбора кроме как остановить обработку страницы и выдать пользователю сообщение об ошибке.

Эта идея не везде пользовалась популярностью. При наличии ошибок в 99% страниц очень велик шанс показать пользователю сообщение об ошибке, вместо запрошенной страницы. Кроме того нехватка новых возможностей в XHTML 1.0 и 1.1, не оправдали затрат и авторы страниц в основном игнорируют application/xhtml+xml. Но это не означает, что они игнорировали XHTML в целом. Конечно же, нет! Приложение С в спецификации XHTML 1.0 дало всем веб-авторам мира лазейку: «Сделай что-то, что выглядит вроде как синтаксис XHTML, но сохрани для него MIME-тип text/HTML». А это именно то, что делают тысячи разработчиков по всему миру.

Даже сегодня, когда многие страницы претендуют на то, чтобы называться XHTML — они начинаются с XHTML DOCTYPE, в них используются строчные буквы для названий тегов, используются кавычки вокруг значений атрибутов, добавляется слэш после пустых элементов типа <br /> и <hr /> — только незначительная часть из этих страниц имеют MIME-тип application/xhtml+xml, который вызовет драконовскую обработку ошибок XML. Любая страница, которая подается с MIME-типом text/HTML, независимо от ее типа документа, синтаксиса, или стиля кода, будет обрабатываться с помощью упрощенного HTML-анализатора, игнорируя любые ошибки разметки и никогда не выдавая сообщения об ошибках пользователям (или кому-либо другому), даже если реально ошибки на странице есть.

XHTML 1.0 имеет такую лазейку. Но в XHTML 1.1 ее уже нет и незавершенная XHTML 2.0 продолжает традиции применения драконовской обработки ошибок. Именно поэтому есть миллиарды страниц, которые утверждают, что они XHTML 1.0, и только горстка, которые утверждают, что они XHTML 1.1 (или XHTML 2.0). Итак, ты действительно используешь XHTML? Проверь MIME-тип. (На самом деле, если ты не знаешь, какой MIME-тип ты используешь, я могу почти гарантировать, что ты еще используешь text/HTML). Если твоя страница имеет MIME-тип отличный от application/xhtml+xml, то твой так называемый "XHTML" не является XML. Просто одно название.

Куда дальше

Показать комментарии