2013-12-11 88 views
1

我想提出一個請求,像這樣在Fiddler2提琴手結腸

User-Agent: Fiddler 
Host: asdf.example.com 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 0 
Key=asdf:qwer 

當我點擊執行後增加了空間,提琴手編輯最後一行寫着:

Key=asdf: qwer 

注意額外的空間。

爲什麼會發生這種情況,並可能導致我的請求出現問題?

回答

3

RFC 2616, 4.2 Message Headers

每個頭字段包含一個名稱後面跟着冒號( 「:」)的 和字段值。字段名稱 不區分大小寫。 該字段值可以在LWS的任何數量 之前,儘管單個SP優選爲

[...]

的場含量不包括任何前導或尾隨LWS:場值的第一個非空格字符 之前或之後的最後一個非 線性白色空間中發生空格 字段值的字符。這種前導或尾隨的LWS可以在不改變字段值的語義的情況下被移除 。在解釋字段值或向下遊轉發消息 之前,發生在字段內容之間的任何LWS 可能會被替換爲單個SP 。

換句話說:對於字段值,領先的空格將被忽略,並且空間甚至是優選的。當你想發送空間時,你必須quote the stringSome-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中運行您的網站。例如,將=更改爲-,您會發現它會起作用。

+0

謝謝!實際上,我的請求有問題(返回'400 - 無效的頭名稱') - 是否它將'Key = asdf:'解釋爲鍵和'qwer'作爲值? –

+0

不,'field-name'(你試圖設置的「標題」)只能存在'token'(見RFC),它不包含'='。 – CodeCaster

+0

感謝您的幫助。 –