7

Gần đây tôi đã kích hoạt Amazon S3 + CloudFront để phục vụ như CDN cho ứng dụng đường ray của tôi. Để sử dụng tài sản phông chữ và hiển thị chúng trong Firefox hoặc IE, tôi phải bật CORS trên thùng S3 của mình.Liệu Amazon S3 có cần thời gian để cập nhật cài đặt CORS không? Bao lâu?

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

Sau đó, tôi sử dụng curl -I https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz, tôi nhận:

HTTP/1.1 200 OK 
x-amz-id-2: Ovs0D578kzW1J72ej0duCi17lnw+wZryGeTw722V2XOteXOC4RoThU8t+NcXksCb 
x-amz-request-id: 52E934392E32679A 
Date: Tue, 04 Jun 2013 02:34:50 GMT 
Cache-Control: public, max-age=31557600 
Content-Encoding: gzip 
Expires: Wed, 04 Jun 2014 08:16:26 GMT 
Last-Modified: Tue, 04 Jun 2013 02:16:26 GMT 
ETag: "723791e0c993b691c442970e9718d001" 
Accept-Ranges: bytes 
Content-Type: text/javascript 
Content-Length: 39140 
Server: AmazonS3 

Tôi có nên xem 'Access-Control-Allow-Origin' một số ở đâu? S3 có mất thời gian để cập nhật các cài đặt CORS không? Tôi có thể buộc tiêu đề hết hạn nếu bộ nhớ đệm của chúng không?

+0

Đảm bảo bạn đã giải quyết những vấn đề này nếu bạn không thấy CORS có hiệu lực. http://docs.aws.amazon.com/AmazonS3/latest/dev/cors-troubleshooting.html Lý tưởng nhất là không nên mất quá nhiều thời gian. Tôi đã thấy nó mất khoảng một vài phút trước đó. – Keshi

Trả lời

4

Hãy thử gửi header Xuất xứ:

$ curl -v -H "Origin: http://example.com" -X GET https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz > /dev/null 

Kết quả sau đó sẽ hiển thị các tiêu đề phản ứng CORS bạn đang tìm kiếm:

< Access-Control-Allow-Origin: http://example.com 
< Access-Control-Allow-Methods: GET 
< Access-Control-Allow-Credentials: true 
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method 

Thông tin thêm về làm thế nào để gỡ lỗi yêu cầu CORS với cURL có thể được tìm thấy ở đây: How can you debug a CORS request with cURL?

Lưu ý rằng có nhiều loại yêu cầu CORS khác nhau (đơn giản và preflight) , một hướng dẫn hay về sự khác biệt có thể tìm thấy ở đây: http://www.html5rocks.com/en/tutorials/cors/

Hy vọng điều này sẽ hữu ích!

1

Hãy thử những:

  1. Cố gắng phạm vi xuống các tên miền mà bạn muốn cho phép truy cập vào. S3 không thích *.
  2. CloudFront + S3 doesn't handle the CORS configuration correctly ngoài hộp. Một kludge là nối thêm một chuỗi truy vấn chứa tên của miền giới thiệu, và cho phép hỗ trợ một cách rõ ràng các chuỗi truy vấn trong các thiết lập phân phối CloudFront của bạn.
0

Bạn có một vài vấn đề với cách bạn kiểm tra CORS. 1. Cấu hình CORS của bạn không có phương thức HEAD. 2. Lệnh curl của bạn không có tiêu đề -H.

Tôi có thể lấy dữ liệu của bạn bằng cách sử dụng curl như sau. Tuy nhiên, họ đổ rác trên màn hình của tôi bởi vì dữ liệu của bạn được nén nhị phân.

curl --request GET https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz -H "http://google.com"

Các vấn đề liên quan