Perché l'analisi rigorosa non è stata scelta per HTML?


38

Mi sono spesso chiesto perché non sia stato scelto un analisi rigorosa durante la creazione di HTML. Per la maggior parte della storia di Internet, i browser hanno accettato qualsiasi tipo di markup e hanno fatto del loro meglio per analizzarlo. Il processo degrada le prestazioni, consente alle persone di scrivere senza senso e rende difficile interrompere funzionalità obsolete.

C'è un motivo specifico per cui l'HTML non è rigorosamente analizzato?


7
Potresti trovare interessante l'articolo di Joels, Martian Headsets . Degno di nota anche RFC 793: principio di robustezza , che afferma esplicitamente che le implementazioni TCP dovrebbero fare del loro meglio per analizzare la spazzatura. Da allora questo principio è stato applicato ai browser.
Brian,

25
@Brian: robustezza significa che non dovresti cadere quando ricevi schifezze. Ciò non significa che devi dare un senso alla merda.
Marjan Venema,

2
XHTML utilizza un analisi rigorosa.
user16764

3
Sono solo io o nessuna di queste risposte è molto soddisfacente?
gsingh2011,

2
@ gsingh2011 Nessuna delle risposte è soddisfacente, ma la mia risposta è la verità. Alcuni di noi qui erano attivi in ​​rete molto tempo fa :-) Ma sì, è sorprendente quanta spazzatura ci rimane per ragioni così semplici.
Ross Patterson,

Risposte:


39

Il motivo è semplice: al momento dei primi browser grafici, NCSA Mosiac e successivamente Netscape Navigator, quasi tutto l'HTML era scritto a mano. Gli autori del browser (Netscape è stato creato da persone ex-Mosaic) hanno riconosciuto rapidamente che il rifiuto di eseguire il rendering di HTML errato sarebbe stato respinto dagli utenti e voilà!


7
+1 sì, è così che è iniziato tutto, in vi o blocco note. Con la maggior parte delle pagine copiate da un codice di esempio errato, non è mai migliorato. Inoltre, il WWW è cresciuto in modo esponenziale, quindi chiunque fosse in grado di scrivere è diventato uno sviluppatore web e si trattava di iniziare rapidamente.
jqa

1
Apparentemente, questa risposta in coniugazione con il commento di @ Jukka offre la migliore spiegazione possibile
Shubham,

35

Perché fare le ipotesi migliori è la cosa giusta da fare, dal punto di vista del browser maker. Considera la situazione: idealmente, l'HTML che ricevi è completamente corretto e su specifica. È fantastico. Ma la parte interessante è cosa succede quando l'HTML non è corretto; poiché abbiamo a che fare con input da una fonte su cui non abbiamo alcuna influenza, in realtà, dobbiamo essere preparati per questo. Ora, quando ciò accade, cosa possiamo fare? Abbiamo due opzioni: a) fallire eb) fare il possibile per recuperare l'errore. Se falliamo, l'utente non ha nient'altro che un messaggio di errore inutile e non c'è nulla che possano fare al riguardo, perché non controllano il server. Se facciamo il massimo sforzo, l'utente ha almeno quello che potremmo fare della pagina, e spesso l'ipotesi è per lo più corretta.

L'unico vero problema con questo è quando hai bisogno dei messaggi di errore, che in genere si trovano in una situazione di sviluppo: vuoi assicurarti che l'HTML che generi sia corretto e dato che "funziona nel browser X" non equivale a "corretto", non possiamo semplicemente eseguirlo attraverso un browser e vedere se funziona: non possiamo dire la differenza tra HTML corretto e HTML errato che il browser ha corretto per te. Questo è un problema risolvibile però; ci sono plugin del browser che segnalano violazioni degli standard, c'è il validatore W3C e molti altri strumenti simili.


7
Beh, non penso che qualcuno servirebbe HTML che genera errori. Perché pensi che un compilatore che assume il codice sia diverso da un browser che assume HTML.
Shubham,

1
Sono d'accordo con Shubham qui - "dato che abbiamo a che fare con input da una fonte su cui non abbiamo alcuna influenza" è falso, l'influenza è indiretta ma alcuni siti web supportano ancora IE6 a causa di quella influenza.
Steve314,

2
@Shubham: un compilatore è diverso perché il suo scopo non è quello di trasformare il codice sorgente leggibile dalla macchina in una forma digeribile dall'uomo, ma di trasformare il codice sorgente leggibile dall'uomo in qualcosa che è più conveniente per un computer (codice macchina o qualche intermedio formato). Con il compilatore, correggi l'input e sei contento che il codice non sia arrivato in produzione. Con il browser, maledici il creatore del browser o l'autore del sito Web, ma in entrambi i casi non riesci a vedere la pagina.
tdammers,

2
@Shubham: generalmente l'utente di un compilatore avrà il controllo sul codice sorgente che viene compilato. Questo non è generalmente il caso delle pagine Web.
supercat

17

Gli autori HTML e gli strumenti di creazione producono markup scadenti. I browser fanno del loro meglio per motivi competitivi: un browser che non riesce a visualizzare la maggior parte delle pagine Web in modo ragionevole sarà rifiutato dagli utenti, a cui non importa minimamente di chi sia la colpa.

È piuttosto diverso da quello che fanno le implementazioni del linguaggio di programmazione. Compilatori e interpreti lavorano su un codice che si può presumere sia stato scritto da un programmatore, mentre tutti e suo fratello possono scrivere HTML con una formazione minima o senza. Il markup HTML è un codice, in un certo senso, ma sono dati piuttosto che istruzioni del linguaggio di programmazione e la (buona) tradizione nel software deve essere tollerante con i dati.

XHTML in linea di principio impone regole di analisi rigorose (XML), in modo tale che un documento XHTML pubblicato con un tipo di contenuto XML venga visualizzato solo se è ben formato in senso XML, altrimenti solo il primo errore viene comunicato all'utente. Questo non è mai diventato popolare nell'authoring web - quasi tutto il "XHTML" in giro è servito come text / html ed elaborato come tag soup tradizionale in un modo molto liberale, solo con alcune nuove eccentricità.


15
HTML authors and authoring tools produce crappy markup.- lo fanno perché i browser lo accettano. Se fin dall'inizio i browser non lo avessero accettato, allora questi strumenti e autori non sarebbero stati in grado di cavarsela producendo markup scadenti
user93353

3
@GrandmasterB - Penso che ti sfugga il punto - Anche dove c'era solo un browser sul mercato - non ha eseguito un'analisi rigorosa.
user93353

3
Nota divertente: dici che se un browser non è in grado di analizzare un sito non valido, perderà la quota di mercato. Ma basta guardare ad esempio: per quanto brutto sia, non perde quote di mercato. Obbliga solo i poveri sviluppatori a scrivere hack sporchi utilizzando le vecchie API ... E non farmi iniziare sul suo schema di versione ...
Max

3
All'inizio, i browser venivano scritti in fretta per gestire un linguaggio di markup che non era stato finalizzato e non aveva specifiche ufficiali - non c'erano regole di analisi rigide. (HTML 2.0, nel 1995, era nominalmente basato su SGML, ma era troppo tardi per averlo effettivamente implementato.)
Jukka K. Korpela,

2
In realtà, IE ha perso gran parte della sua quota di mercato. Ma questo probabilmente ha poco o niente a che fare con l'analisi rigorosa. IE, con le sue stranezze, ha governato il Web abbastanza a lungo da forzare gli altri browser a imitare in gran parte le sue stranezze, perché così tante pagine andrebbero in pezzi.
Jukka K. Korpela,

9

In sostanza, l'HTML si basava su un altro linguaggio di markup non hyperlink chiamato SGML spesso usato per documentazione e manuali e simili.

Da un articolo sulla storia dell'HTML:

Tim aveva menzionato che alcuni dei primi documenti HTML erano basati su un vecchio linguaggio SGML che il CERN stava già utilizzando: - Abbiamo incluso in HTML alcuni tag del tagset SGML utilizzati e una volta supportati al CERN [...] Il parser HTML ignorerà i tag che non comprende e ignorerà gli attributi che non comprende i tag CERN-SGML .

[...] la maggior parte dei primi tag HTML sono stati in realtà presi dal linguaggio SGMLGuid del CERN, che a sua volta era una variante di AAP (un primo linguaggio SGML). Ad esempio, titolo, hn, p, ol e così via sono tutti apparentemente tratti da questa lingua. L'unico cambiamento radicale fu l'aggiunta del collegamento anchor () molto importante, senza il quale il WWW non sarebbe decollato.

Prendendo nota della parte che ho messo in grassetto, in pratica, hanno implementato un sottoinsieme dei tag disponibili nel sistema SGML con cui avevano familiarità, aggiungendo il nuovo tag anchor <a> e scegliendo di ignorare uno dei tanti tag che non avevano non ti interessa o desideri supportarlo per motivi di wahtever (come tag per elenchi bibliografici, xmp per "esempio", tag "box" per disegnare un riquadro attorno a un blocco di testo, ecc.). Quindi il modo più semplice per farlo è quello di perdonare il markup che non è conosciuto dal parser e ignorare il markup sconosciuto nel miglior modo possibile, indipendentemente dal fatto che la causa sia un markup errato digitato dall'utente o il modo più semplice e veloce per convertire documenti esistenti in questo nuovo formato HTML consente di aggiungere alcuni collegamenti ipertestuali ai documenti SGML esistenti e di ignorare qualsiasi tag non supportato o implementato.


La sintassi HTML si basava infatti sulla sintassi concreta di riferimento SGML per la forma del suo markup. Ma lo stesso SGML non aveva elementi per il markup dei documenti che l'HTML poteva prendere in prestito, il set di elementi HTML assomiglia in realtà a quello del linguaggio di markup dei documenti GML di IBM , traslitterato in SGML RCS.
Ross Patterson,

5

Questo è in parte un residuo storico della guerra dei browser

IE e netscape erano in competizione per conquistare il mercato e continuavano a rilasciare nuove funzionalità che continuavano a diventare sempre più "fantastiche", e sono stati costretti ad accettare le pagine progettate per l'altro browser.

Ciò significa che il browser accetta e ignora silenziosamente i tag sconosciuti, dopo che i comitati hanno iniziato a essere coinvolti ... beh, hai un comitato che progetta materiale e di conseguenza molte versioni diverse (con alcune specifiche ambigue) in cui il browser vuole supportare la maggior parte di e la creazione di un parser separato per ogni versione sarebbe enorme. Quindi è (relativamente) più facile usare un singolo parser con diverse modalità.

Da un'altra parte, netscape e IE volevano che HTML fosse accessibile per l'uomo comune (come lo era la moda di quei giorni), il che significa cercare di fare ciò che l'utente voleva fare invece di quello che diceva di fare e inciampare su ogni tag penzolante.

A peggiorare il problema è che ci sono anche diversi siti "tutorial" che insegnano la cosa sbagliata e pensano che siano giusti perché ciò che insegnano funziona.

In definitiva, ciò significa che se ora crei un browser con solo HTML rigoroso che analizza il 99% dei siti, semplicemente non funzionerà.


6
Anche prima che IE arrivasse sul mercato, Netscape non ha mai effettuato un rigoroso analisi. Ricordo Netscape dall'inizio del 1997.
user93353

Anche se esistessero standard chiari, sarebbe difficile per un browser distinguere tra tag che sono stati legittimamente definiti dopo il rilascio del browser, rispetto a tag che non sono mai stati e non sarebbero mai legittimi. Se i tag "opzionali" che miglioravano un documento ma non erano necessari per la sua correttezza semantica includevano il numero di versione dello standard che li implementava, allora un browser che implementava la versione 23 dello standard poteva ignorare silenziosamente un <o24wowzo>tag ma rimandare a un <o23wowzo>, ma tale un design avrebbe compromesso l'aspetto "leggibile dall'uomo" dell'HTML.
supercat

2

Bene, abbiamo cercato di stabilire una buona opzione rigorosa negli anni '000, ma non ha funzionato perché le persone che seguivano "le migliori pratiche" alla cieca, incolpavano i browser quando il loro markup errato andava a pezzi in modalità rigorosa. E ai venditori di browser non piaceva essere incolpati.

Sostenevano che fosse perché volevano che il web fosse più accessibile ai non professionisti, ma a nessuno veniva impedito di usare HTML 4 nella sua forma più indulgente.

Detto questo, puoi comunque servire HTML5 come XML se desideri un layout rigoroso. IMO può essere un buon modo per raccogliere i benefici del layout o dell'interfaccia utente in una modalità più rigorosa prima di trasmetterlo ad altre persone che potrebbero o meno volerlo come rigoroso senza rischi reali (escludendoli strappando il doctype perché in realtà favoriscono la modalità stranezze - nel 2017 (il tempo di questa modifica) dovrebbero essere girati. Quindi è ancora lì praticamente ma faccio qualche ricerca. Mi sembra di ricordare che ci sono alcuni avvertimenti che non avevamo con XHTML che non influenzano davvero il lavoro di layout. Basta non spargere la voce che è "l'unico modo per farlo bene" o che gli stupidi che acquistano in quel tipo di chiacchiere accecheranno l'idea, incolperanno di nuovo i browser e si prenderanno i denti dall'unica alternativa rigorosa che ci è rimasta. (modifica del 2017:

http://mathiasbynens.be/notes/xhtml5

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.