HTTP 1.0 vs 1.1


263

Qualcuno potrebbe darmi una breve panoramica delle differenze tra HTTP 1.0 e HTTP 1.1? Ho trascorso un po 'di tempo con entrambi gli RFC, ma non sono stato in grado di tirare fuori molta differenza tra loro. Wikipedia dice questo:

HTTP / 1.1 (1997-1999)

Versione attuale; connessioni persistenti abilitate per impostazione predefinita e funziona bene con i proxy. Supporta inoltre il pipelining delle richieste, consentendo di inviare più richieste contemporaneamente, consentendo al server di prepararsi per il carico di lavoro e potenzialmente trasferire le risorse richieste più rapidamente al client.

Ma questo non significa molto per me. Mi rendo conto che questo è un argomento un po 'complicato, quindi non mi aspetto una risposta completa, ma qualcuno può darmi una breve panoramica delle differenze a un livello leggermente inferiore?
Con questo intendo che sto cercando le informazioni che avrei bisogno di sapere per implementare un server HTTP o un'applicazione. Sono principalmente alla ricerca di una spinta nella giusta direzione in modo da poterlo capire da solo.


Questo è abbastanza un buon riassunto delle differenze chiave: http://www.research.att.com/~bala/papers/h0vh1.html
Kev

3
Buon per te per essere andato alla fonte. Sembra che tu non sappia molto della rete in generale, se non capisci quel riassunto. Forse dovresti cercare anche quei termini.
Marcin,

4
Anche se sono ancora un principiante quando si tratta di queste cose, il mio problema principale è che il riassunto mi dà più il "che cosa" piuttosto che i "come".
Jason Baker,


Risposte:


363

Supporto proxy e campo Host:

HTTP 1.1 ha un'intestazione host richiesta dalle specifiche.

HTTP 1.0 non richiede ufficialmente un'intestazione Host, ma non fa male aggiungerne una e molte applicazioni (proxy) prevedono di vedere l'intestazione Host indipendentemente dalla versione del protocollo.

Esempio:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

Questa intestazione è utile perché ti consente di instradare un messaggio attraverso i server proxy e anche perché il tuo server web può distinguere tra diversi siti sullo stesso server.

Questo significa che se hai blahblahlbah.com e helohelohelo.com puntano entrambi allo stesso IP. Il server Web può utilizzare il campo Host per distinguere quale sito desidera la macchina client.

Collegamenti persistenti:

HTTP 1.1 consente inoltre di avere connessioni permanenti, il che significa che è possibile avere più di una richiesta / risposta sulla stessa connessione HTTP.

In HTTP 1.0 è stato necessario aprire una nuova connessione per ogni coppia richiesta / risposta. E dopo ogni risposta la connessione sarebbe chiusa. Ciò ha comportato alcuni grossi problemi di efficienza a causa di TCP Slow Start .

Metodo OPZIONI:

HTTP / 1.1 introduce il metodo OPTIONS. Un client HTTP può utilizzare questo metodo per determinare le capacità del server HTTP. Viene utilizzato principalmente per la condivisione delle risorse tra le origini nelle applicazioni Web.

caching:

HTTP 1.0 aveva il supporto per la memorizzazione nella cache tramite l'intestazione: If-Modified-Since.

HTTP 1.1 si espande molto sul supporto di memorizzazione nella cache utilizzando qualcosa chiamato "tag entità". Se 2 risorse sono uguali, avranno gli stessi tag entità.

HTTP 1.1 aggiunge anche le intestazioni condizionali If-Unmodified-Since, If-Match, If-None-Match.

Ci sono anche ulteriori aggiunte relative alla memorizzazione nella cache come l'intestazione Cache-Control.

100 Continua stato:

C'è un nuovo codice di ritorno in HTTP / 1.1 100 Continua. Questo per impedire a un client di inviare una richiesta di grandi dimensioni quando quel client non è nemmeno sicuro se il server può elaborare la richiesta o è autorizzato a elaborare la richiesta. In questo caso il client invia solo le intestazioni e il server dirà al client 100 Continua, vai avanti con il corpo.

Molto di piu:

  • Autenticazione digest e autenticazione proxy
  • Nuovi codici di stato extra
  • Codifica di trasferimento Chunked
  • Intestazione della connessione
  • Supporto di compressione migliorato
  • Molto di più

15
Si noti che molti server / proxy che affermano di voler HTTP / 1.0 si arrabbieranno molto se si omette l'intestazione Host.
Paul Tomblin,

2
HTTP 1.0 supporta la compressione tramite l'intestazione Content-Encoding. Come accennato da Paul, consiglierei sicuramente a tutti i client HTTP / 1.0 di inviare l'intestazione Host, poiché non è severamente vietato farlo e le cose funzioneranno più spesso come previsto. Altrimenti, questo è morto.
cpm

@ Paul Tomblin: grazie ho aggiunto queste informazioni.
Brian R. Bondy,

2
Riguardo "se hai blahblahlbah.com e helohelohelo.com puntano entrambi allo stesso IP. Il tuo server web può usare il campo Host per distinguere quale sito desidera la macchina client." Quindi cosa succede quando un client HTTP 1.0 non ci dà un campo host per distinguere?
Pacerier,

@Pacerier di solito una pagina predefinita di qualche tipo; dipende dal server.
Andrew Lambert,

14

 HTTP 1.0 (1994)

  • È ancora in uso
  • Può essere utilizzato da un client che non è in grado di gestire le risposte di server bloccate (o compresse)

 HTTP 1.1 (1996-2015)

  • Formalizza molte estensioni alla versione 1.0
  • Supporta connessioni persistenti e pipeline
  • Supporta trasferimenti chunked, compressione / decompressione
  • Supporta l'hosting virtuale (un server con un singolo indirizzo IP che ospita più domini)
  • Supporta più lingue
  • Supporta trasferimenti a intervallo di byte; utile per riprendere i trasferimenti di dati interrotti

HTTP 1.1 è un miglioramento di HTTP 1.0. Di seguito sono elencati i quattro miglioramenti principali:

  1. Uso efficiente degli indirizzi IP, consentendo di offrire più domini da un singolo indirizzo IP.

  2. Risposta più rapida, consentendo a un browser Web di inviare più richieste su una singola connessione permanente.

  3. Risposta più rapida per pagine generate dinamicamente, grazie al supporto per la codifica a blocchi, che consente di inviare una risposta prima che sia nota la sua lunghezza totale.
  4. Risposta più rapida e grandi risparmi di larghezza di banda, con l'aggiunta del supporto cache.

9

Per applicazioni banali (ad esempio il recupero sporadico di un valore di temperatura da un termometro abilitato al web) HTTP 1.0 va bene sia per un client che per un server. È possibile scrivere un client o un server HTTP 1.0 basato su socket bare-bones in circa 20 righe di codice.

Per scenari più complicati HTTP 1.1 è la strada da percorrere. Aspettati un aumento da 3 a 5 volte della dimensione del codice per gestire le complessità del protocollo HTTP 1.1 più complesso. La complessità arriva principalmente, perché in HTTP 1.1 dovrai creare, analizzare e rispondere a varie intestazioni. È possibile proteggere l'applicazione da questa complessità facendo in modo che un client utilizzi una libreria HTTP o che un server utilizzi un server di applicazioni Web.


7

Un problema di compatibilità chiave è il supporto per connessioni persistenti . Di recente ho lavorato su un server che "supportava" HTTP / 1.1, ma non riuscivo a chiudere la connessione quando un client inviava una richiesta HTTP / 1.0. Quando si scrive un server che supporta HTTP / 1.1, assicurarsi che funzioni anche con client solo HTTP / 1.0.


8
HTTP / 1.1 richiede che siamo compatibili HTTP / 1.0?
Pacerier,

@Troy - È valido inviare una risposta a una richiesta HTTP 1.1 e subito dopo chiudere la connessione (socket da cui la richiesta è stata letta sul server)? Il che significa praticamente che il server implementa HTTP 1.0
Guy Avraham il

5

Una delle prime differenze che posso ricordare dalla cima della mia testa sono più domini in esecuzione nello stesso server, il recupero parziale delle risorse, questo ti permette di recuperare e velocizzare il download di una risorsa (è ciò che fa quasi ogni acceleratore di download).

Se vuoi sviluppare un'applicazione come un sito Web o simile, non devi preoccuparti troppo delle differenze, ma dovresti conoscere almeno la differenza tra GETe i POSTverbi.

Ora se vuoi sviluppare un browser allora sì, dovrai conoscere il protocollo completo e se stai cercando di sviluppare un server HTTP.

Se sei interessato solo a conoscere il protocollo HTTP, ti consiglio di iniziare con HTTP / 1.1 invece di 1.0.


1
Pensa che Jason conosce già la differenza tra GET e POST se sta pensando di costruire da zero il proprio server / app HTTP. :)
Kev,

1
In realtà ho fatto un po 'di lavoro con un server web che attualmente supporta solo HTTP 1.0, mi stavo solo chiedendo cosa comporta l'aggiunta del supporto 1.1.
Jason Baker,

2

HTTP 1.1 è la versione più recente di Hypertext Transfer Protocol, il protocollo applicativo World Wide Web che viene eseguito sulla suite di protocolli TCP / IP di Internet. rispetto a HTTP 1.0, HTTP 1.1 fornisce una consegna più rapida delle pagine Web rispetto all'HTTP originale e riduce il traffico Web.

Esempio di traffico Web: ad esempio, se si accede a un server. Allo stesso tempo, così tanti utenti accedono al server per i dati, quindi c'è la possibilità di sospendere il server. Questo è il traffico Web.


1

HTTP 1.1 include l'intestazione host nelle sue specifiche mentre HTTP 1.0 non ha ufficialmente un'intestazione host, ma non rifiuta di aggiungerne una.

L'intestazione host è utile perché consente al client di instradare un messaggio attraverso il server proxy e le principali differenze tra le versioni 1.0 e 1.1 HTTP sono:

  1. HTTP 1.1 viene fornito con connessioni persistenti che definiscono che possiamo avere più di una richiesta o risposta sulla stessa connessione HTTP.
  2. mentre in HTTP 1.0 devi aprire una nuova connessione per ogni richiesta e risposta
  3. In HTTP 1.0 ha un pragma mentre in HTTP 1.1 ha Cache-Control questo è simile a pragma

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.