我想發送一個JSON負載的CORS請求。我控制着服務器和客戶端。如何在跨域(CORS)XMLHttpRequest中發送自定義標題?
服務器具有必須與每個請求一起發送自定義標題。因此,這個自定義標題使得請求'不簡單',因此請求必須用OPTIONS請求進行預檢。
我可以看到jQuery使OPTIONS請求,但它不會發送自定義標題。
方法我試過:使用beforeSend選項
在這兩種情況下,瀏覽器是不是一起發送自定義頁眉。
我使用的是FF 17.0.1,jquery 1.8.3。
我想發送一個JSON負載的CORS請求。我控制着服務器和客戶端。如何在跨域(CORS)XMLHttpRequest中發送自定義標題?
服務器具有必須與每個請求一起發送自定義標題。因此,這個自定義標題使得請求'不簡單',因此請求必須用OPTIONS請求進行預檢。
我可以看到jQuery使OPTIONS請求,但它不會發送自定義標題。
方法我試過:使用beforeSend選項
在這兩種情況下,瀏覽器是不是一起發送自定義頁眉。
我使用的是FF 17.0.1,jquery 1.8.3。
你的問題不在於jquery,它在how CORS works。您的beforeSend回調可能按預期工作......但瀏覽器不會在預檢請求中發送自定義標頭,無論如何。這是設計的;預檢請求的目的是確定useragent(瀏覽器)允許發送超出CORS規範中定義的「簡單」內容的信息。因此,作爲預檢請求的一部分,useragent發送任何非簡單數據(例如您的自定義標題)是自我毀滅的。
要指示useragent將您的自定義標題包含在實際的CORS請求中,請在預檢響應中包含Access-Control-Allow-Headers
header。值得注意的是,如果您不太關心useragent傳輸的標頭,我相信您只需回顯Access-Control-Request-Headers
請求標頭字段的值作爲您在響應中發送的Access-Control-Allow-Headers
的值即可。
您可能還需要包含一些在syntax section of the spec中定義的其他Access-Control-Allow-*
標頭。
也CORS - How do 'preflight' an httprequest?
見也見Mozilla's CORS preflight example,這表明在行動這些頭。
在試圖設置標題的位置顯示您的代碼。 – Barmar
'headers:{Header-name:value}'選項不起作用? – Barmar
引起問題的標題名稱是什麼?我同意Barmar,顯示你所有的JS代碼和請求/響應可以幫助調試。 – monsur