我對Safari處理CORS請求的方式有問題。請考慮以下情形:Safari在302重定向後失敗CORS請求
- DomainA中承載一個頁面,這使得一個XHR請求DomainB中(Origin標設置爲DomainA中)
- DomainB中返回302重定向做DomainC(原點頭被設置爲null,這似乎是與RFC OK)
- DomainC返回與實際內容
此作品在Chrome中,FF 200響應,但它在Safari瀏覽器(在Mozilla/5.0(Macintosh的測試;英特爾的Mac OS X 10_10_5)未能爲AppleWebKit/600.8 .9(KHTML,如Gecko)Version/8.0.8 Safari/600.8.9)。
當我在沒有打開xhr.withCredentials的情況下發出請求時,首先,Safari在向DomainC發出實際請求之前發出OPTIONS預檢請求,因爲所有請求都是簡單請求,但我可以處理。問題是Safari在向DomainC發送預檢請求之後發生故障,表示「無法從null發出任何請求」。 我可以通過將Access-Control-Allow-Origin設置爲*並刪除Access-Control-Allow-Credentials頭(這些是互斥的)來繞過此操作,這將使此場景生效。但我仍然認爲這是不正確的行爲。現在
,事情是我需要的憑證由傳遞(也沒有,因爲它取決於一些第三方的服務器上,我不能將它傳遞一些其他的方式)。所以,讓我們設置
xhr.withCredentials
爲true,我們又回到了「不能讓從空的任何要求」,現在甚至通配符訪問控制允許的憑據沒有幫助。
我認爲所有CORS標頭設置正確,但請隨時檢查我。測試例如可以在這裏找到:http://a.ihatesafari.com
這到底是怎麼回事?這是一個錯誤還是我錯過了什麼?
感謝答案
它甚至未能DomainA中做出一個XHR到DomainA中並重定向到DomainC的簡單的情況。 – hrdwdmrbl