背景:
在使用jQueryPOST中,自訂標頭可以添加以增強與伺服器的通訊。挑戰在於觀察自訂標頭被添加到不太常見的「Access-Control-Request-Headers」標頭中,而不是預期的標頭中。
說明:
當瀏覽器將AJAX 請求傳送到與其啟動的網域不同的網域時,瀏覽器會先傳送一個「預檢」要求(OPTIONS 方法)來檢查伺服器是否允許自訂標頭。這樣做是為了防止跨站腳本 (XSS) 攻擊。
作為此預檢請求的一部分,瀏覽器會新增「Access-Control-Request-Headers」標頭,其中列出了將要執行的自訂標頭發送實際請求。伺服器回應「204 No Content」狀態代碼和「Access-Control-Allow-Headers」標頭,指定允許哪些自訂標頭。
解決方案:
為了避免這種行為並直接在POST 請求中設定自訂標頭,您可以在jQuery Ajax 呼叫的「beforeSend」函數中明確設定標頭。這可確保在發送請求之前將標頭新增至請求中,從而繞過預檢請求程序。
以下是如何在jQuery Ajax 呼叫中設定標頭的範例:
$.ajax({ type: "POST", beforeSend: function(request) { request.setRequestHeader("Authority", authorizationToken); }, url: "entities", data: "json=" + escape(JSON.stringify(createRequestObject)), processData: false, success: function(msg) { $("#results").append("The result =" + StringifyPretty(msg)); } });
透過在「beforeSend」函數中設定標頭,jQuery 會將「Authority」標頭加入實際的POST 請求中,可讓您傳遞自訂標頭並接收預期的伺服器回應。
以上是如何避免在 jQuery AJAX POST 請求中的「Access-Control-Request-Headers」標頭中設定自訂標頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!