2017-07-24 120 views
1

我們正在使用Amazon S3 + CloudFront來提供JSON文件。我們上傳了兩個文件,可以考慮爲j1.json和j2.json。兩個文件最初都在響應中響應了有效的CORS頭文件,但是在j2.json上運行失效時,其頭響應發生了變化,我們正面臨着CORS問題。在S3存儲設置Amazon S3 + CloudFront CORS問題

CORS權限 -

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>*</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

響應頭爲j1.json爲j2.json

enter image description here

響應頭 enter image description here

在這兩個JSON文件同一個桶,但j2.json響應缺少這些頭文件

Access-Control-Allow-Methods →GET 
Access-Control-Allow-Origin →* 
Access-Control-Max-Age →3000 

我們嘗試刪除並再次上傳對象,它不響應響應中的CORS頭。這個問題的可能原因是什麼?以及如何解決它?

+0

清除瀏覽器緩存並嘗試在其他瀏覽器中使用。發生這種情況時最可能的解釋是文件的陳舊緩存副本 – sideshowbarker

+0

@sideshowbarker我們已經嘗試了不同的瀏覽器,清除緩存和重新加載。同樣從郵差也。到目前爲止沒有運氣。 – RockStar

+2

將CloudFront分配配置爲將訪問控制請求頭,訪問控制請求方法和原始頭信息轉發到S3(在「緩存行爲」中)?在郵遞員測試時,您是否發送了「Origin:」標題(和其他標題)?你能顯示網址嗎? –

回答

3

在S3將返回正確的CORS響應頭之前,它需要看到該請求是一個CORS請求。

CloudFront的,默認情況下,前鋒少頭原點越好,因爲越少標題的由來需要,更好的緩存命中率將趨於(因爲沒有發送到起源任何頭不能引起來源以改變其反應,因此對特定請求的所有響應預期不會改變,並因此可被緩存)。但是對於CORS請求,我們需要S3來查看一些特定的頭文件,以便它能夠做出相應的反應。

在緩存行爲配置中,您需要將這3個請求標頭白名單轉發到原點。

Access-Control-Request-Headers 
Access-Control-Request-Method 
Origin 

此更改完成後,失效也可能適用。