2014-04-04 80 views
30

幾個月前,我遇到了一個名爲「SESSION_ID」的自定義HTTP頭的問題,未被nginx代理轉發。爲什麼在HTTP頭名中禁止使用下劃線

我被告知下劃線是根據HTTP協議的RFC禁止的。

使用谷歌搜索,我發現大多數服務器如apachenginx將它們定義爲非法。

RFC2616 4.2節說

遵循相同的通用格式定義在RFC的3.1節給出822 [9]

RFC822

的字段名必須由可打印的ASCII字符組成 (即字符的值在33.和126之間, 個十進制數,冒號除外)

下劃線是ASCII表中95個十進制字符(屬於33-126範圍)。 我錯過了什麼?

回答

57

他們不被禁止。這是CGI的遺產。 Here

如果沒有明確設置underscores_in_headers on;,nginx的將自動刪除HTTP標頭用下劃線(這是完全合法的根據HTTP標準)。這是爲了防止將標題映射到CGI變量時出現歧義,因爲在該過程中,破折號和下劃線都被映射爲下劃線。

+0

剛剛花了幾個小時調試爲什麼我的rails應用程序在開發中工作正常,但不是因爲這樣的生產:/ – Qwertie

相關問題