2013-10-03 144 views
1

我正在使用jQuery.ajax進行HTTP連接。在我的項目中,我想設置自定義的http頭,但我只想發送我設置的頭。目前我的頭文件正在發送,但另外還有一些我沒有設置的頭文件。

這是我如何添加自定義標題:

$.ajax("http://fakedomain.foo", {headers: {header1: "value1", header2: "value2"}}); 

我可能被罰款甚至在情況下,它無法設置頭的整個集合,但只添加額外的。但即使在這種情況下, 有時我的標頭在發送前被修改。舉例來說,如果我添加這些頭

{ 
     "Connection": "close", 
     "Accept-Encoding": "deflate, gzip", 
     "Accept": "text/plain", 
    } 

然後,這是實際上正在發送的內容(我做了Wireshark的捕獲只是爲了確認這一點)

{ 
     "Connection": "close", 
     "Accept-Encoding": "gzip,deflate,sdch", 
     "Accept": "text/plain, */*; q=0.01", 
     "Accept-Language": "es-ES,es;q=0.8", 
     "Dnt": "1", 
     "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
     ... 
    } 

,你可以看到一些邪惡的gobling在調整我的標題,並且已經將「sdch」編碼添加到「Accept-Encoding」標題,並且還改變了「Accept」標題,以便它也接受 */*。如果WS很挑剔,並且需要根據標題採取不同的操作,那麼這是一個真正的問題。

所以總結起來:

  1. 有沒有辦法只發送我的頭,並沒有多餘的嗎?

    2.如果不是,有沒有辦法將我的自定義標題添加爲原樣,而不會被修改?


UPDATE:
我的壞,我沒有正確設置標頭。 (我發佈的代碼是正確的,但是在我的單元測試中存在一個錯誤,所以我的頭文件並沒有實際添加,而是發送了默認文件。修復後,我可以看到我的頭文件正在發送正確的文本,並沒有修改。 所以,不要擔心#2,問題#1仍然適用。

+1

1)否2)否。發送的標題依賴於broswer,雖然它們都會以某種方式修改它們。 –

回答

2

規範(W3CWHATWG)禁止重寫一些頭,包括Accept-Encoding

有趣的是,該規範並沒有說什麼特別的大約Accept,這意味着瀏覽器必須使用它作爲給定的。在這種情況下,它是在故障的jQuery,其中adds that last part以防萬一 它在那裏si nce 6 years ago

該規範還要求瀏覽器發送一些其他標題,例如Authorization,Host,Connection,Keep-Alive和其他。

+0

你說得對,實際上標題沒有被覆蓋。我會編輯我的答案。 –

+0

你認爲我的回答完全回答你的問題嗎?如果不是,你認爲缺少什麼? – Denis

+0

對不起,我的意思是我會編輯我的問題。忘記問題#2,但感謝發佈鏈接到規格。現在剩下的唯一問題是#1。 –