簡體   English   中英

Chrome將Origin標頭添加到同源請求中

[英]Chrome adding Origin header to same-origin request

我們正在向本地運行的服務器發布一個AJAX請求,即

xhr.open("POST", "http://localhost:9000/context/request");
xhr.addHeader(someCustomHeaders);
xhr.send(someData);

正在執行此javascript的頁面也是從localhost:9000提供的,即這看起來像一個同源請求。

但是,出於某種原因,Google Chrome總是在生成的請求中設置一個Origin標頭,導致我們的服務器根據它的CORS請求的錯誤假設來阻止請求。

這在Firefox中不會發生。

此外,Firefox和Chrome都沒有發送OPTIONS預檢請求,這令人困惑; 為什么在沒有首次預檢的情況下設置Origin標頭以確保服務器允許Origin和Custom標頭?

有誰知道在這種情況下發生了什么? 我們是否誤解了CORS規范?

Chrome和Safari在同源POST / PUT / DELETE請求中包含Origin標頭(同源GET請求不具有Origin標頭)。 Firefox在同源請求中不包含Origin標頭。 瀏覽器不期望同源請求上的CORS響應頭,因此對同源請求的響應將發送給用戶,無論它是否具有CORS頭。

我建議檢查Host標頭,如果它與Origin標頭中的域匹配,請不要將請求視為CORS。 標題看起來像這樣:

Host: example.com
Origin: http://example.com

請注意, Origin將具有方案(http / https),域和端口,而Host將只具有域和端口。

根據RFC 6454 - Web Origin Concept - Origin的存在實際上對任何HTTP請求都是合法的,包括同源請求:

http://tools.ietf.org/html/rfc6454#section-7.3

“用戶代理可以在任何HTTP請求中包含Origin頭字段。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM