Все, что вы знаете об XHTML, — это ложь

xhtml

Почему так важны MIME-типы? Почему я не устаю возвращаться к ним? Причиной тому «драконовская» обработка ошибок.

Браузеры всегда очень мягко обходились с ошибками в HTML-коде. Если, например, вы создали HTML-страницу без тега, то браузер все равно отобразит ее, несмотря на то что всегда, во всех версиях стандарта HTML присутствие элементана странице требовалось безоговорочно. Некоторые теги нельзя вкладывать в другие теги, но, если вы создадите страницу, нарушающую это требование, браузер все равно каким-то одному ему ведомым способом сумеет отобразить ее, не выводя сообщения об ошибке.

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

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

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

В наши дни в коде очень многих веб-страниц в первой строке объявлен тип документа XHTML (например VK.com. И вообще рекомендую узнать как формируется список друзей Вконтакте?), имена тегов набраны строчными буквами, значения атрибутов взяты в кавычки, а при оформлении одиночных тегов применяется косая черта, например



. Но 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). Ваш так называемый XHTML будет XML-форматом лишь по названию все то время, пока вашим веб-страницам не задается тип application/xhtml+xml.