Por que a análise estrita não foi escolhida para HTML?


38

Muitas vezes me perguntei por que a análise estrita não foi escolhida ao criar HTML. Durante a maior parte do histórico da Internet, os navegadores aceitaram qualquer tipo de marcação e fizeram o possível para analisá-la. O processo degrada o desempenho, permite que as pessoas escrevam sem sentido e dificulta a interrupção de recursos obsoletos.

Existe um motivo específico para o HTML não ser analisado estritamente?


7
Você pode achar interessante o artigo de Joels, Marciano Headsets . Também digno de nota é o RFC 793: Princípio da robustez , que afirma explicitamente que as implementações de TCP devem fazer o possível para analisar o lixo. Este princípio foi aplicado aos navegadores.
7273 Brian

25
@ Brian: Robustez significa que você não deve cair quando receber porcaria. Isso não significa que você tenha que entender a porcaria.
Marjan Venema

2
XHTML usa análise rigorosa.
precisa saber é o seguinte

3
Sou apenas eu, ou nenhuma dessas respostas é muito satisfatória?
gsingh2011

2
@ gsingh2011 Nenhuma das respostas é satisfatória, mas minha resposta é a verdade. Alguns de nós aqui estávamos ativos na rede há muito tempo :-) Mas sim, é surpreendente a quantidade de lixo que nos resta por razões tão simples.
Ross Patterson

Respostas:


39

O motivo é simples: na época dos primeiros navegadores gráficos, o NCSA Mosiac e, mais tarde, o Netscape Navigator, quase todo o HTML era escrito à mão. Os autores do navegador (o Netscape foi criado por ex-mosaicos) reconheceram rapidamente que se recusar a renderizar HTML incorreto seria contra eles pelos usuários, e pronto!


7
+1 Sim, foi assim que tudo começou, no vi ou no bloco de notas. Com a maioria das páginas sendo copiadas do código de exemplo ruim, nunca ficou melhor. Além disso, a WWW cresceu, então qualquer um que pudesse digitar se tornaria um desenvolvedor da Web e tudo se resumiria em ser feito rapidamente.
JQA

1
Aparentemente, esta resposta em conjugação com @ o comentário de Jukka dar a melhor explicação possível
Shubham

35

Porque fazer o melhor palpite é a coisa certa a ser feita, da perspectiva de quem cria um navegador. Considere a situação: idealmente, o HTML que você recebe está completamente correto e conforme as especificações. Isso é ótimo. Mas a parte interessante é o que acontece quando o HTML não está correto; já que estamos lidando com informações de uma fonte na qual não temos influência, precisamos realmente estar preparados para isso. Agora, quando isso acontece, o que podemos fazer? Temos duas opções: a) falham eb) fazem o melhor esforço para se recuperar do erro. Se falharmos, o usuário não terá nada além de uma mensagem de erro inútil e não há nada que possa fazer sobre isso, porque não controla o servidor. Se fizermos o melhor possível, o usuário terá pelo menos o que poderíamos fazer da página e, geralmente, o palpite está correto.

O único problema real disso é quando você precisa das mensagens de erro, que geralmente estão em uma situação de desenvolvimento - você deseja garantir que o HTML gerado esteja correto e, como "funciona no navegador X" não é equivalente a "correto", não podemos simplesmente executá-lo através de um navegador e ver se funciona: não podemos dizer a diferença entre o HTML correto e o HTML incorreto que o navegador corrigiu para você. Este é um problema solucionável; existem plugins para navegadores que relatam violações de padrões, há o validador W3C e muitas outras ferramentas semelhantes.


7
Bem, acho que ninguém forneceria HTML que gera erros. Por que você acha que um compilador que assume código é diferente de um navegador que assume HTML.
Shubham

1
Eu concordo com Shubham aqui - "como estamos lidando com informações de uma fonte sobre a qual não temos influência" é falso, a influência é indireta, mas alguns sites ainda suportam o IE6 por causa dessa influência.
Steve314

2
@Shubham: Um compilador é diferente porque seu objetivo não é transformar o código-fonte legível por máquina em uma forma digerível por humanos, mas transformar o código-fonte legível por humanos em algo mais conveniente para um computador (código de máquina ou algum intermediário formato). Com o compilador, você corrige a entrada e fica feliz que o código não tenha entrado em produção. Com o navegador, você amaldiçoa o criador do navegador ou o autor do site, mas, de qualquer forma, não consegue ver a página.
tdammers

2
@ Shubham: Geralmente o usuário de um compilador terá controle sobre o código fonte que está sendo compilado. Geralmente, esse não é o caso das páginas da web.
supercat 02/09

17

Os autores de HTML e as ferramentas de autoria produzem marcação ruim. Os navegadores fazem o melhor possível por razões competitivas: os navegadores que não conseguirem renderizar a maioria das páginas da Web de maneira razoável serão rejeitados pelos usuários, que não se importarão nem um pouco com quem é a culpa.

É bem diferente do que as implementações da linguagem de programação fazem. Compiladores e intérpretes trabalham em código que pode ser assumido como escrito por um programador, enquanto todos e seu irmão podem escrever HTML com o mínimo de treinamento ou sem ele. A marcação HTML é um código, em certo sentido, mas são dados, e não instruções de linguagem de programação, e a (boa) tradição em software é ser tolerante com os dados.

O XHTML, em princípio, impõe regras estritas de análise (XML), para que um documento XHTML fornecido com um tipo de conteúdo XML seja exibido apenas se for bem formado no sentido XML - caso contrário, apenas o primeiro erro será comunicado ao usuário. Isso nunca se tornou popular na criação na web - quase todo o "XHTML" é servido como texto / html e processado como uma sopa de tags tradicional de uma maneira muito liberal, apenas com algumas novas excentricidades.


15
HTML authors and authoring tools produce crappy markup.- eles fazem porque os navegadores aceitam. Se a partir dos navegadores começando não aceito-o -, então essas ferramentas e autores não teria sido capaz de fugir com a produção de baixa qualidade de marcação
user93353

3
@GrandmasterB - Eu acho que você perdeu o ponto - Mesmo onde havia apenas um navegador no mercado - ele não fazia uma análise rigorosa.
user93353

3
Nota engraçada: você diz que se um navegador não conseguir analisar um site inválido, ele perderá participação de mercado. Mas basta olhar para ie: por pior que seja, não perde participação de mercado. Ele só força os desenvolvedores pobres para hacks escrita sujas no uso de APIs de idade ... E não me faça começar no que está versionamento esquema ...
Max

3
No começo, os navegadores eram escritos às pressas para lidar com uma linguagem de marcação que não foi finalizada e não tinha especificação oficial - não havia regras rígidas de análise. (HTML 2.0, em 1995, era nominalmente baseado em SGML, mas já era tarde demais para ter que realmente implementado.)
Jukka K. Korpela

2
O IE perdeu muito de sua participação de mercado. Mas isso provavelmente tem pouco ou nada a ver com análise rigorosa. O IE, com suas esquisitices, governou a web por tempo suficiente para forçar outros navegadores a imitar amplamente suas esquisitices, porque muitas páginas se desintegrariam.
Jukka K. Korpela

9

O resumo seria que o HTML se baseava em outra linguagem de marcação sem hiperlink, chamada SGML, frequentemente usada para documentação, manuais e similares.

De um artigo sobre a história do HTML:

Tim mencionou que alguns dos primeiros documentos HTML eram baseados em uma antiga linguagem SGML que o CERN já estava usando: - Incluímos no HTML algumas tags do conjunto de tags SGML usadas no CERN e já suportadas no CERN. O analisador de HTML ignora as tags que não entende e ignora os atributos que não entende das tags CERN-SGML .

[...] a maioria das primeiras tags HTML foram realmente tiradas da linguagem CERN SGMLGuid, que em si era uma variante da AAP (uma linguagem SGML antiga). Por exemplo, título, hn, p, ol e assim por diante são aparentemente retirados desse idioma. A única mudança radical foi a adição do importante link anchor (), sem o qual a WWW não decolaria.

Tomando nota da parte que eu coloquei em negrito, basicamente, eles implementaram um subconjunto das tags disponíveis no sistema SGML com as quais estavam familiarizadas, adicionando a nova tag anchor <a> e optando por ignorar qualquer uma das muitas tags que não fizeram ' não se preocupe ou queira oferecer suporte por qualquer motivo (como tags para listas bibliográficas, xmp para "example", tag "box" para desenhar uma caixa em torno de um bloco de texto, etc.). Portanto, a maneira mais simples de fazer isso é perdoar a marcação que não é conhecida pelo analisador e ignorar a marcação desconhecida da melhor maneira possível, independentemente de a causa ter sido digitada pelo usuário com marcação incorreta ou a maneira mais rápida e fácil de converter documentos existentes para esse novo formato HTML é adicionar alguns hiperlinks aos documentos SGML existentes e ignorar as tags que não são suportadas ou implementadas.


A sintaxe HTML foi realmente baseada na sintaxe concreta de referência SGML para a forma de sua marcação. Mas o SGML em si não tinha elementos para marcar documentos que o HTML poderia emprestar. O conjunto de elementos HTML realmente se assemelha ao do GML da IBM linguagem de marcação de documentos , transliterada no SGML RCS.
Ross Patterson

5

Este é parcialmente um remanescente histórico da guerra dos navegadores

O IE e a netscape estavam competindo para conquistar o mercado e continuavam lançando novos recursos que se tornavam cada vez mais "impressionantes", e eram obrigados a aceitar as páginas projetadas para o outro navegador.

Isso significa que o navegador aceita e ignora as tags desconhecidas silenciosamente, depois que os comitês começaram a se envolver ... bem, você tem um comitê projetando coisas e, como resultado, muitas versões diferentes (com algumas especificações ambíguas) em que o navegador deseja dar suporte à maioria dos eles, e criar um analisador separado para cada versão seria um enorme inchaço. Portanto, é (relativamente) mais fácil usar um único analisador com modos diferentes.

Por outra parte, o netscape e o IE queriam que o html fosse acessível para o homem comum (como era a moda naqueles dias), o que significa tentar fazer o que o usuário queria que fosse feito, em vez do que ele dizia fazer e tropeçar em todas as tags penduradas.

Para piorar o problema é que também existem vários sites "tutoriais" ensinando a coisa errada e pensando que estão certos, porque o que ensinam funciona.

Por fim, isso significa que se você criar um navegador com apenas html estrito, analisando 99% dos sites por aí simplesmente não funcionará.


6
Mesmo antes do IE entrar no mercado, a Netscape nunca fazia uma análise rigorosa. Lembro-me de Netscape a partir de início de 1997.
user93353

Mesmo se houvesse padrões claros, seria difícil para um navegador distinguir entre tags que foram legitimamente definidas após o lançamento do navegador, versus tags que nunca foram e nunca seriam legítimas. Se as tags "opcionais" que aprimoraram um documento, mas não fossem necessárias para sua correção semântica, incluíssem o número da versão do padrão que as implementou, um navegador que implementou a versão 23 do padrão poderia ignorar silenciosamente uma <o24wowzo>tag, mas recusou-a <o23wowzo>. um design prejudicaria o aspecto "legível por humanos" do HTML.
supercat 02/09

2

Bem, tentamos estabelecer uma boa opção estrita nos anos mil, mas não deu certo porque as pessoas que seguiam as "melhores práticas" cegamente culparam os navegadores quando a marcação incorreta foi reduzida no modo estrito. E os fornecedores de navegadores não gostaram de ser responsabilizados.

Eles alegaram que era porque queriam a web mais acessível para não profissionais, mas ninguém estava impedido de usar o HTML 4 em sua forma mais branda.

Dito isto, você ainda pode servir HTML5 como XML se desejar um layout de estilo estrito. Na IMO, pode ser uma boa maneira de colher os benefícios de fazer o layout ou o trabalho da interface do usuário de maneira mais rigorosa antes de repassá-lo a outras pessoas que podem ou não querer que seja estrita sem riscos reais (exceto que rasgem o tipo de documento porque na verdade, eles preferem o modo peculiar - em 2017 (o tempo desta edição), eles devem ser filmados. Portanto, ainda está lá, basicamente, mas faça alguma pesquisa. Lembro-me de que havia algumas ressalvas que não tínhamos com o XHTML que não realmente impactam o trabalho do layout, mas não divulgue que é "a única maneira de fazer as coisas direito", ou os twits que se interessam por esse tipo de conversa irão dogpilar a idéia, culpar os navegadores novamente e eles vão morder os dentes fora da única alternativa estrita que nos resta. (2017 edit:

http://mathiasbynens.be/notes/xhtml5

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.