2014-04-04 25 views
30

Pochi mesi fa ho avuto un problema con un'intestazione HTTP personalizzata denominata "SESSION_ID", non trasferita dal proxy nginx.Perché i caratteri di sottolineatura sono vietati nei nomi delle intestazioni HTTP

Mi è stato detto che i caratteri di sottolineatura sono proibiti in base al protocollo RFC del protocollo HTTP.

Googling, ho trovato che molti server come apache o nginx definiscono come illegali.

RFC2616 sezione 4.2 dice

seguono lo stesso formato generico come quello indicato nella sezione 3.1 di RFC 822 [9]

e RFC822 dice

Il campo di nome deve essere composto da caratteri ASCII stampabili (ovvero, caratteri con valori compresi tra 33 e 126., decimali, ad eccezione di due punti)

sottolineatura è 95 carattere decimale nella tabella ASCII (appartiene alla gamma 33-126). Cosa mi manca?

risposta

57

Non sono vietati. È un'eredità CGI. Here

Se non in modo esplicito imposta underscores_in_headers on;, nginx silenziosamente cadere intestazioni HTTP con caratteri di sottolineatura (che sono perfettamente valido secondo lo standard HTTP). Questo viene fatto al fine di evitare ambiguità quando si mappano le intestazioni alle variabili CGI, in quanto sia i trattini che i caratteri di sottolineatura vengono mappati ai caratteri di sottolineatura durante tale processo.

+0

Appena trascorso ore di debugging perché la mia app per binari funziona bene nello sviluppo ma non in produzione a causa di ciò: / – Qwertie