簡體   English   中英

Amazon S3 + CloudFront CORS 問題

[英]Amazon S3 + CloudFront CORS issue

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

在 S3 存儲桶上設置的 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 的響應頭在此處輸入圖片說明

同一個存儲桶中的兩個 JSON 文件,但 j2.json 響應缺少這些標頭

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

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

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

默認情況下,CloudFront 將盡可能少的標頭轉發到源,因為源所需的標頭越少,您的緩存命中率就會越高(因為任何未發送到源的標頭都不會導致源發生變化它的響應,因此對給定請求的所有響應都不會改變,因此是可緩存的)。 但是對於 CORS 請求,我們需要 S3 來查看一些特定的標頭,以便它可以做出相應的反應。

在緩存行為配置中,您需要將這 3 個請求標頭列入白名單以轉發到源。

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

一旦此更改完成,失效也可能是合適的。

只是添加到'Michael - sqlbot'的答案中,現在似乎還需要將Allow-Control-Allow-Origin標頭列入白名單。 它可能不會顯示在下拉列表中; 然后你需要輸入它!

我還附加了其他幫助我讓它工作的配置,可能會幫助某人: https : //stackoverflow.com/a/67929204/5657783

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM