Почему браузеры не строгие относительно HTML?

Хорошо известно, что браузеры будут принимать недопустимый HTML и делать все возможное, пытаясь понять это. Если вы создаете веб-страницу, содержащую только следующий код:

<html>
    <head>
        <title>This is bad HTML</title>
    <body>
        <h1>Bad HTML</h2>
        <p>This is a paragraph
    </body>

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

Это для меня такое же, как если бы Javascript мог быть написан следующим образом:

if (some_var == 1) {
    say_something("some text');
else {
    do_something_else();
// END OF CODE

который, компилятор Javascript, написанный с тем же усилием, чтобы понять смысл недействительного кода, мог бы проработать так, как вы имели в виду, или сделать свой собственный смысл, но запустить его в конце концов.

Я видел несколько статей и вопросов по поводу вопроса "Стоит ли даже нарисовать правильный HTML?" , в котором представлены несколько мнений о плюсах и минусах написания действительного HTML. Однако, что это действительно заставляет меня задаться вопросом:

Почему браузеры принимают недопустимый HTML-код в первую очередь?

ПРИМЕЧАНИЕ. Следующие вопросы задают не больше вопросов, а способ дать контекст единственному вопросу, который я задаю здесь:

  • Почему браузер не является строгим?

  • Почему они не отклоняют с ошибками неверный код, как и любой другой язык программирования? (не то, что я называю HTML языком программирования, но вы понимаете)

  • Разве это не заставит всех разработчиков писать HTML-код, который будет интерпретироваться точно так же в любом браузере?

  • Если браузеры отказались разобрать недопустимую разметку, не приведет ли это к тому, что эффективно приведет к действительной разметке везде и от тех, кто хочет опубликовать контент в Интернете?

  • Если это происходит из-за исторических причин и обратной совместимости, не пора ли уже менять время, когда мы уже видим такие сайты, как adsense.google.com, отказывающиеся от совместимости с IE < v10?

РЕДАКТИРОВАТЬ: Те, кто голосует, чтобы закрыть этот вопрос, пожалуйста, передумайте. Это не широкий вопрос, а не на основе. Это очень конкретный вопрос по очень конкретному вопросу, полностью связанный с миром программирования, и на который можно однозначно ответить реальным ответом тех, кто его действительно знает. Спасибо.

Ответ 1

Я не знаю, почему они разрешили это с самого начала, но вот почему они теперь cant: Поддержка Legacy. Если браузер принудительно строит html, огромные части Интернета просто сломаются, и да, некоторые люди будут обновлять свой код, но некоторые страницы будут просто потеряны. Для браузеров нет стимула делать это, потому что потребителю кажется, что браузер просто не работает на некоторых страницах и переключается на другой, который по-прежнему поддерживает менее оптимальный html.

В основном потому, что он был разрешен с самого начала, теперь он должен быть разрешен.

Ответ 2

"Почему браузеры принимают недопустимый HTML-код в первую очередь?"

По соображениям совместимости, а в случае с более новыми браузерами, поскольку HTML5 диктует алгоритм для разбора даже недопустимых документов.

Ранее спецификации HTML были неоднозначными во многих ситуациях, например, что происходит, когда отображается неправильный тег, или несогласованность вложенности теги, например <b><i></b></i>. Тем не менее, многие документы "просто работают", потому что некоторые более ранние браузеры игнорируют неожиданные теги или даже "правильную" неправильную вложенность.

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

Операторы

[U] ser при анализе HTML-документа могут прервать парсер при первой ошибке синтаксического анализа, с которой они сталкиваются, для которой они не хотят применять правила, описанные в этой спецификации. [Акцент добавлен.]

Но, опять же, ни один современный браузер, насколько мне известно, прерывает анализ документа на ранней стадии из-за ошибок синтаксического анализа (исключая чрезвычайные ситуации, такие как нехватка памяти).

В ситуации adsense.google.com: это, вероятно, не имеет никакого отношения к недопустимому HTML, а, скорее, потому, что IE9 и более ранняя поддержка DOM недостаточны для нужд adsense.google.com.

Ответ 3

Чтобы избежать ответов на основе мнений, этот тип вопроса требует ответа, основанного на официальной ссылке с достоверными и/или официальными источниками.

Ниже приведены цитаты из Справка и часто задаваемые вопросы валидатора W3C, в которых рассматриваются Why are browsers accepting invalid HTML in the first place? и некоторые другие проблемы, связанные с этим.


О методе разметки

Большинство страниц в World Wide Web написаны на компьютерных языках (например, HTML), которые позволяют веб-авторам структурировать текст, добавлять мультимедийный контент и указать, какой внешний вид или стиль, результат должен иметь.

Что касается каждого языка, у них есть своя грамматика, лексика и синтаксис, и каждый документ, написанный на этих компьютерных языках, должен следовать этим правилам. Языки (X) HTML для всех версии до XHTML 1.1, используют машиночитаемые грамматики, называемые DTD, механизм, унаследованный от SGML.

Однако, так же, как тексты на естественном языке могут включать в себя правописание или грамматические ошибки, документы с использованием языков разметки могут (для различных причины) не следует этим правилам.

[...]


Концепции

Одним из важных принципов компьютерного программирования является: "Быть консервативный в том, что вы производите; быть либеральным в том, что вы принимаете".

Браузеры выполняют вторую половину этой максимы, принимая веб-страницы и пытается отобразить их, даже если они не являются законными HTML. Как правило это означает, что браузер попытается сделать обоснованные догадки о что вы, вероятно, имели в виду. Проблема в том, что разные браузеры (или даже разные версии одного и того же браузера) догадывается о той же незаконной конструкции; хуже, если ваш HTML-код действительно патологический, браузер может безнадежно запутаться и производят беспорядочный беспорядок или даже сбой.

Вот почему вы хотите следовать первой половине максимы, сделав убедитесь, что ваши страницы являются законными HTML.

[...]


Срок действия может не означать качество, а недействительность может означать некачественное качество

Действительная веб-страница не обязательно хорошая веб-страница, но недействительная Веб-страница имеет мало шансов стать хорошей веб-страницей.

По этой причине тот факт, что W3C Markup Validator говорит, что один проверка пропусков страниц не означает, что W3C оценивает, что это хорошая страница. Это означает, что инструмент (не обязательно без недостатков) обнаружил, что страница соответствует определенному набору правил. Больше нет, нет Меньше. Вот почему значки "valid..." никогда не должны быть считается "печатью качества W3C".


Неожиданное поведение браузера может означать, что они фактически не принимают недопустимую разметку

В то время как современные веб-браузеры все более хорошо разбираются в синтаксическом анализе даже худший HTML-суп-тег, некоторые ошибки не всегда пойманы изящно. Очень часто различное программное обеспечение на разных платформах будет не обрабатывать ошибки аналогичным образом, что делает его чрезвычайно сложным для последовательного применения стиля или макета.

Использование стандартной, совместимой разметки и таблиц стилей, с другой стороны рука, дает гораздо больше шансов на обработку одной страницы последовательно на разных платформах и пользовательских агентах.

[...]


Проблемы совместимости

Проверка того, что страница "отображает штраф" в нескольких современных браузерах может быть разумной страховкой, что страница будет "работать" сегодня, но она не гарантирует, что он будет работать завтра.

В прошлом многие авторы, которые полагались на причуды Netscape 1.1 неожиданно обнаружили, что их страницы оказались совершенно пустыми в Netscape 2.0. В то время как Internet Explorer изначально был настроен на ошибку, совместимый с Netscape, он также перешел к соблюдению стандартов в более поздних версиях релизов.

[...]


Опираясь слишком много на сторонние инструменты

Ответ на этот вопрос заключается в том, что языки разметки - это не более чем данные форматы. Таким образом, веб-сайт не похож на что-либо вообще! Это требует только на визуальный внешний вид, когда он представлен вашим браузером.

На практике разные браузеры могут и могут отображать одну и ту же страницу очень иначе. Это преднамеренно и не подразумевает какого-либо браузера ошибка. Термин, иногда используемый для этого, - WYSINWOG - Что вы видите, это не Что другие получают (если не по совпадению). Это действительно одна из основные сильные стороны Интернета, которые (например) слабовидящие пользователь может выбрать очень крупную печать или текст в речь без издателя вынуждены идти навстречу неприятностям и затратам на подготовку отдельного издание.