2015-06-17 10 views
8

Come suggerisce il titolo, sto cercando alcune informazioni sullo scopo dei campi di intestazione pseudo/colon, ovvero voglio sapere perché abbiamo un secondo tipo di campo di intestazione ...Scopo dei campi Pseudo/Colon Header

Inoltre, so che i campi di intestazione pseudo/colon vengono utilizzati in http2 al posto del messaggio e delle righe di stato (^^^ il motivo per cui non conosco ^^^); ma i campi di intestazione pseudo/colon utilizzati in http1 per trasmettere informazioni diverse (dallo stato e dalla richiesta)?

risposta

11

Lo scopo dei campi di pseudo header era di unificare il modo in cui le informazioni di richiesta/risposta venivano trasportate in SPDY e successivamente in HTTP/2 (che è basato su SPDY).

Dopo aver progettato SPDY (ma anche HTTP/2), era necessario trasportare le informazioni di richiesta o di risposta formattate in modi diversi.

Le intestazioni HTTP sono coppie (chiave, valore), è facile.

Tuttavia, esiste il concetto del metodo HTTP. Questo è il primo token di una riga di richiesta, quindi non è una tupla; la sua chiave è definita dalla sua posizione (il primo token) e il suo valore è i caratteri effettivi presenti sulla linea di richiesta che formano il primo token.

Lo stesso vale per la destinazione della richiesta e la versione HTTP: sono il secondo e il terzo token della riga di richiesta.

Quindi concettualmente, una richiesta HTTP possono essere rappresentati con coppie in questo modo, ad esempio:

(method, GET) 
(target, /) 
(version, HTTP/1.1) 
(Connection, close) 
(Accept, *) 

Tuttavia, "metodo", "target" e "versione" non potevano essere utilizzati come intestazioni HTTP semplici , perché non erano mai stati riservati come standard header header HTTP dalla specifica HTTP e le persone avrebbero potuto usarli come nomi di intestazione HTTP personalizzati (immagina un'API REST usando l'intestazione "version").

HTTP/2 aveva bisogno di un modo per trasportare tali coppie in modo omogeneo, come coppie, perché ciò avrebbe semplificato (molto) il protocollo.

Quindi, l'introduzione di nomi speciali per le informazioni supplementari trasportate dalla richiesta e linee di risposta. Questa informazione extra è posizionale in HTTP/1.1, ma una coppia normale in HTTP/2, rendendo HTTP/2 più omogenea a questo riguardo: porta solo coppie. Tanto che il frame HTTP/2 che trasporta le informazioni di richiesta e risposta è lo stesso e si chiama semplicemente HEADERS.

I nomi di pseudo-intestazione in cui è stato scelto di iniziare con due punti perché quello sarebbe un carattere non valido per un nome di intestazione in HTTP/1.1. HTTP/1.1 non utilizza nomi di pseudo-intestazione.