我有一個從S3(HTML img
標籤)使用的圖像的代碼加載一個網頁,我有一個使用xmlhttprequest
的頁面。標籤加載得到緩存而沒有CORS頭,因此xmlhttprequest
看到緩存版本,檢查它的頭文件並失敗並出現交叉原點錯誤。
詳情:
編輯:在失敗對Safari 5.1.6和Chrome 21.0.1180.89。在Firefox 14
使用S3的新CORS,我設置一個CORSRule
爲使工作正常:
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>0</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
如果我要求從S3圖像不用設置原點的請求頭,我回去的圖像,而不響應中的任何CORS標題。
由於瀏覽器使用緩存中的非CORS版本,此get的緩存和隨後的CORS請求(一個用於設置請求頭中原點的請求)將被拒絕。
解決此問題的最佳方法是什麼?我可以設置一些東西,這樣非CORS版本永遠不會被緩存嗎?我應該通過將?some_flag
附加到請求的URL來區分CORS請求嗎?
理想情況下,即使請求中不包含「origin」,我也會讓S3始終發送所需的CORS頭文件。
你使用什麼瀏覽器?這種行爲是否發生在所有瀏覽器中?這聽起來像是一個瀏覽器錯誤。您提出的查詢參數解決方案聽起來像是一個很好的解決方法。 – monsur
添加「編輯:在safari 5.1.6和chrome 21.0.1180.89都失敗了。在firefox 14中工作正常。」 – Wes
然後可能是一個WebKit錯誤。這聽起來像是同樣的問題:https://bugs.webkit.org/show_bug.cgi?id=63090該錯誤表明,添加標頭「Vary:Origin」可能會解決該問題。 – monsur