對於只是多了一個「簡單的請求」以外的,權威的來源否認了「訪問控制允許來源」頭通配符,並要求你明確地設置頁眉「訪問控制允許-headers」。
這裏是Mozilla states for "Simple request":
只允許使用方法是:
除了由自動設置的頭用戶代理(例如 連接,用戶代理,等等),其被允許 手動設置唯一標題有:
的爲Content-Type頭只允許值包括:
- 應用程序/ x-WWW窗體-urlencoded
- 的multipart/form-data的
- text/plain的
當你的請求不符合 「簡單請求」 的要求,你可能陷入"Preflighted Requests"。
GET,HEAD或POST以外的方法。另外,如果POST用於發送具有除application/x-www-form-urlencoded,multipart/form-data或text/plain之外的Content-Type的請求數據,如果POST請求使用application/xml或text/xml向服務器發送XML有效內容,則會請求該請求。
至於資格的請求 -
重要提示:在響應資格的請求時,服務器必須指定一個域,而不能使用野生梳理。 Access-Control-Allow-Origin:*
由於您沒有提供來自您的頁面和服務器的實際HTTP請求和響應,我將不得不做出一些假設。我假設你的頁面在域foo.example下加載,並且你的API位於相同的foo.example域下,並且你的「其他」服務器位於域bar.example中。
您可能需要設置你的頁面進行重定向請求到「其他」服務器使用這些頭:
Access-Control-Request-Method: GET, OPTIONS
Access-Control-Request-Headers: x-requested-with, Content-Type, CUSTOM-HEADER
然後,您可能需要設置你的「其他」服務器對一個選項請求做出響應與:
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: x-requested-with, Content-Type, CUSTOM-HEADER
然後您的頁面應該能夠完成請求。
如果跨源XHR在其他瀏覽器中工作,但在Safari中不工作,這聽起來像是Safari中的一個錯誤,它使其不符合https://fetch.spec.whatwg.org/中指定的當前CORS要求。 。所以請考慮在https://bugs.webkit.org/ – sideshowbarker
提交bug。這可能是Safari的一個bug,但我希望有一個解決方法。 – Noodles
檢查這個http://stackoverflow.com/questions/5750696/how-to-get-a-cross-origin-resource-sharing-cors-post-request-working?rq=1 – nmanikiran