2013-09-25 41 views
6

我想從ajax請求訪問一個駐留在S3中的HTML文件,我得到了403錯誤。AWS S3 CORS 403與選項請求錯誤

我在線閱讀AWS,如果我這樣做,我需要設置AWS CORS規則來修復403錯誤。

但是,我一直在嘗試兩天,我沒有任何運氣。這裏是我的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> 
    <ExposeHeader>XMLHttpRequest</ExposeHeader> 
    <AllowedHeader>x-csrftoken</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

我的HTTP請求的樣子:

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Access-Control-Request-He... x-csrftoken 
Access-Control-Request-Me... GET 
Connection keep-alive 
Host xxxxxxxxx.cloudfront.net 
Origin http://localhost:8000 
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 

誰能幫我看看有什麼我錯過了什麼?

謝謝!

+0

原來,問題不是S3但CloudFront的。有沒有人試圖將S3的CORS配置轉發到cloudfront? –

回答

0

HTTP 403(Frobidden)並不一定意味着您需要CORS。一種選擇是讓所有的請求CloudFront的(相同的來源),並在你的分佈,起源幾個和行爲。例如:

Beavior -> Origin 

/api/* -> my.api.com 
/static/* -> my.s3.bucket 

但是,如果你確實需要跨域請求,該CORS頭應該由CloudFront的轉發,並具有相同的行爲,在你的榜樣,你可能想和您允許的標題更寬容(<AllowedHeader>*</AllowedHeader> ?)。但是,這會更涉及到超過CloudFront的或S3的瀏覽器行爲。