2016-11-25 30 views
4

最近,我在OSX和iOS上的Safari上遇到了CORS(跨源資源共享)請求問題, Chrome和Firefox。我跟着the documentation of W3C和處理服務器端的預檢要求,我的回答是這樣的:交叉原點資源共享問題:OSX Safari和iOS Safari在預檢請求後失敗

HTTP/1.0 200 OK 
Access-Control-Allow-Origin: http://192.168.1.96:4399 
Access-Control-Allow-Methods: POST 
Access-Control-Allow-Methods: GET 
Access-Control-Allow-Methods: OPTIONS 
Access-Control-Allow-Headers: Origin 
Access-Control-Allow-Headers: Authorization 
Access-Control-Allow-Headers: X-Requested-With 
Access-Control-Allow-Headers: Accept 
Access-Control-Allow-Headers: Access-Control-Request-Method 
Access-Control-Allow-Headers: Access-Control-Request-Headers 
Access-Control-Allow-Headers: DNT 
Access-Control-Allow-Headers: X-CustomHeader 
Access-Control-Allow-Headers: Content-Type 
Access-Control-Max-Age: 0 
Date: Fri, 25 Nov 2016 08:45:25 GMT 
Origin: http://192.168.1.96:4399 
Access-Control-Expose-Headers: Origin 
Content-Encoding: gzip 
Transfer-Encoding: chunked 

這種反應正常工作在Chrome,Firefox和Android瀏覽器:一個POST請求預檢要求後立即發送。但在Safari瀏覽器,服務器響應reflight請求後,我得到了這樣的錯誤消息來自控制檯:

Failed to load resource: The network connection was lost. 

我檢查從服務器的預檢響應,但發現它與上面相同......搜索和嘗試這麼多之後有時,我仍然不能使它:-(
工作是否有任何人認爲遇到之前的問題?誰能弄清楚我做了什麼錯?
非常感謝事先!

+0

聽起來像是你在Safari中的錯誤,你可以在https://bugs.webkit.org/ – sideshowbarker

+0

@sideshowbarker感謝報告非常多。但有趣的是,偶爾我發現它在我從OSX Safari上的開發菜單中選擇「Disable Cross-Origin Restrictions」選項時有效!我懷疑這個問題可能與瀏覽器安全策略有關,我會繼續嘗試弄清楚。 – BenMiracle

回答

2

這一切都關於Safari將origin添加到OPTIONS請求標頭Access-Control-Request-Headers

所以要解決它,你應該在Access-Control-Allow-Headers中啓用此標題作爲迴應。

PS:看到類似的問題CORS request not working in Safari

+0

OP在網絡級別看到預檢請求失敗。你所指的是一個配置不當的OPTIONS響應。但他從來沒有得到過這種迴應。 – RavenHursT

+0

@RavenHursT不,brutto提到一個格式錯誤的請求標題,因此這是正確的答案(我剛剛驗證過,它對我有用) – thomaux