2009-05-03 7 views
23

Quando un browser invia una richiesta HTTP a un server Web, quale codifica viene utilizzata per codificare il protocollo HTTP sul filo? È ASCII? UTF8? o UTF16? O specifica quale codifica utilizza in un formato predefinito (prima che avvenga qualsiasi decodifica?)Quale codifica viene utilizzata dal protocollo HTTP?

P.S Non sto chiedendo il carico utile effettivo (ad esempio HTML) della richiesta/risposta. Mi sto chiedendo circa la linea di richiesta (cioè GET /index.html HTTP/1.1) e le intestazioni (cioè Host: google.com)

risposta

7

RFC 2616 include questo:

OCTET   = <any 8-bit sequence of data> 
CHAR   = <any US-ASCII character (octets 0 - 127)> 
UPALPHA  = <any US-ASCII uppercase letter "A".."Z"> 
LOALPHA  = <any US-ASCII lowercase letter "a".."z"> 
ALPHA   = UPALPHA | LOALPHA 
DIGIT   = <any US-ASCII digit "0".."9"> 
CTL   = <any US-ASCII control character 
        (octets 0 - 31) and DEL (127)> 
CR    = <US-ASCII CR, carriage return (13)> 
LF    = <US-ASCII LF, linefeed (10)> 
SP    = <US-ASCII SP, space (32)> 
HT    = <US-ASCII HT, horizontal-tab (9)> 
<">   = <US-ASCII double-quote mark (34)> 

E poi quasi tutto il resto del documento è definito in termini di quelle entità (OCTET, CHAR, ecc.). Quindi è possibile esaminare la RFC per scoprire quali parti di una richiesta/risposta HTTP possono includere OCTET s; tutte le altre parti devono essere ASCII. (Lo farei io stesso, ma ci vorrebbe molto tempo)

Per la riga di richiesta in particolare, il nome del metodo e la versione HTTP saranno solo caratteri ASCII, ma è possibile che l'URL stesso possa includere caratteri non ASCII. Ma se si guarda a RFC 2396, lo dice.

Un URI è una sequenza di caratteri da una serie molto limitata, vale a dire le lettere dell'alfabeto base latina, cifre e alcuni caratteri speciali.

Che presumo significa che sarà composto anche da caratteri ASCII.

20

HTTP 1.1 utilizza US-ASCII come caratteri di base fissato per l'request line nelle richieste, il status line nelle risposte (ad eccezione del reason phrase) e il field names, ma consente a qualsiasi ottetto i valori dei campi e il message body.

+2

So che dovremmo ** aspettarci ** una frase di ragionamento, ma vuoi dire che è un ** tranne ** - anche lo ione? ;-) – Lucius