我想提出一個請求,像這樣在Fiddler2提琴手結腸
User-Agent: Fiddler
Host: asdf.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Key=asdf:qwer
當我點擊執行後增加了空間,提琴手編輯最後一行寫着:
Key=asdf: qwer
注意額外的空間。
爲什麼會發生這種情況,並可能導致我的請求出現問題?
我想提出一個請求,像這樣在Fiddler2提琴手結腸
User-Agent: Fiddler
Host: asdf.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Key=asdf:qwer
當我點擊執行後增加了空間,提琴手編輯最後一行寫着:
Key=asdf: qwer
注意額外的空間。
爲什麼會發生這種情況,並可能導致我的請求出現問題?
RFC 2616, 4.2 Message Headers:
每個頭字段包含一個名稱後面跟着冒號( 「:」)的 和字段值。字段名稱 不區分大小寫。 該字段值可以在LWS的任何數量 之前,儘管單個SP優選爲。
[...]
的場含量不包括任何前導或尾隨LWS:場值的第一個非空格字符 之前或之後的最後一個非 線性白色空間中發生空格 字段值的字符。這種前導或尾隨的LWS可以在不改變字段值的語義的情況下被移除 。在解釋字段值或向下遊轉發消息 之前,發生在字段內容之間的任何LWS 可能會被替換爲單個SP 。
換句話說:對於字段值,領先的空格將被忽略,並且空間甚至是優選的。當你做想發送空間時,你必須quote the string:Some-Header: " foo"
。
因此,Fiddler顯示(並可能發送)它是很好的,雖然一個自定義的HTTP服務器,不希望有一個空間有錯誤,應該修復。
至於有關「無效的頭名」的錯誤服務器返回您的評論:HTTP頭的定義是這樣的:
message-header = field-name ":" [ field-value ] field-name = token field-value = [...]
正如你所看到的,field-name
只能存在的token
,其中不包括=
(因爲這是一個separator
)。
因此,您使用的標頭名稱Key=asdf
無效,並且由於格式錯誤,服務器會拋出400 Bad Request
。您聲稱獲得的更具體的Invalid header name
,聽起來像您在IIS中運行您的網站。例如,將=
更改爲-
,您會發現它會起作用。
謝謝!實際上,我的請求有問題(返回'400 - 無效的頭名稱') - 是否它將'Key = asdf:'解釋爲鍵和'qwer'作爲值? –
不,'field-name'(你試圖設置的「標題」)只能存在'token'(見RFC),它不包含'='。 – CodeCaster
感謝您的幫助。 –