2013-01-23 36 views
5

Tôi đang lưu trữ một trang web tĩnh thông qua Amazon S3 và tôi có một số Javascript trên đó sẽ thực hiện cuộc gọi đến tên miền khác và phân tích cú pháp XML, JSON, hoặc bất cứ điều gì mà nó được.Amazon S3 CORS Cấu hình XMLHttpRequest GET

Tôi làm theo các bài viết nhiều trên stackoverflow và bài đăng trên blog khác nhau nó liên quan đến mà yêu cầu để có được nó làm việc nhưng ngay cả sau khi làm theo rất chặt chẽ Tôi không bao giờ có thể tái tạo các kết quả.

<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
</CORSRule> 

Tôi thậm chí đã cố gắng thêm có và không có sau đây để các quy tắc,

<AllowedHeader>*</AllowedHeader> 

Các liên kết sau đây cho phép bạn kiểm tra nếu CORS được kích hoạt bằng cách gửi XMLHttpRequests và nó nói nó không phải là hợp lệ để CORS không được thiết lập hoặc nhận dạng đúng.

http://client.cors-api.appspot.com/client/

Một dẫn có thể là những gì được đề xuất trong Amazon S3 tài liệu ở đây,

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html

nói rằng chúng ta cần phải thiết lập các "s3: GetCORSConfiguration" cho phép, mà tôi đã thông qua một line like ...

"Hành động": ["s3: GetObject", "s3: GetCORSConfiguration"],

trong phần "chính sách nhóm chỉnh sửa" từ bảng điều khiển AWS nhưng nó đưa ra lỗi và không thể lưu vì nó không nhận ra hành động này?

Một bài có khả năng tương tự trên stackexchange đây,

HTTP GET to amazon aws from jquery or XMLHttpRequest fails with Origin is not allowed by Access-Control-Allow-Origin

dường như cho thấy rằng nếu tôi có một trang web được lưu trữ trên S3 mà nó không thể cấu hình nó để làm XMLHttpRequests mà GET tới một tài nguyên bên thứ 3 ?

Tôi cảm thấy mình đang ở trong vòng kết nối ... bất kỳ ai có bất kỳ khách hàng tiềm năng/lời khuyên nào? Cảm ơn.

Trả lời

0

Tôi nghĩ bạn nhầm lẫn hoặc tôi đã hiểu sai câu hỏi của bạn.

Bạn bật CORS trên trang web của mình để các trang web khác có thể đưa ra yêu cầu cho trang của bạn.

CORS Việc kích hoạt trên trang web của S3 của bạn sẽ cho phép example.com để nói chuyện với trang S3 của bạn. Nó không cho phép trang web của bạn nói chuyện với example.com.

Để bạn có thể gửi yêu cầu đến các miền khác, họ phải bật các đặc quyền. Bạn không thể bật nó lên một cách kỳ diệu cho tên miền của họ. Nó giống như nói rằng bạn cho phép bản thân bước vào căn nhà trắng và sử dụng phòng tắm của tổng thống. Khi bạn nhảy lên hàng rào, dịch vụ bí mật sẽ từ chối yêu cầu đó bằng vũ lực.

+0

haha, cảm ơn vì đã trả lời, tôi có thể bị nhầm lẫn ... nhưng tôi rất bối rối mà tôi chỉ không chắc chắn ... $ .getJSON ("https: // api.github.com/users/githubuser/events ") Hoạt động tốt trên máy chủ thử nghiệm trên máy tính để bàn của tôi (hoặc thậm chí từ các trang web khác của tôi nếu tôi thực hiện thông qua bảng điều khiển dành cho nhà phát triển Chrome) nhưng khi tôi cố gắng thực hiện tương tự gọi sau khi tôi đã tải trang web đó lên Amazon S3 thì nó không hoạt động vì tôi nhận được lỗi XMLHttpRequests. Về mặt lý thuyết, điều này gợi ý với tôi rằng nó có liên quan đến cấu hình của tôi trên thùng S3 của Amazon vì nó hoạt động trong môi trường thử nghiệm và một số trang web nhất định? –

0

Có thể có một số mối quan hệ ở đây để ví dụ, chúng tôi chỉ làm việc thông qua trên các ứng dụng của chúng tôi được liên quan đến https mà là một cấu hình mã hóa cứng trên một số máy khách hàng của chúng tôi. Tôi không biết chính xác điều đó có nghĩa là gì nhưng nó có thể là nơi để kiểm tra.

thay vì http: // thử https: //

XMLHttpRequest to Amazon S3 fails only on some computers

0

Bạn cần phải phơi bày các tiêu đề kiểm soát truy cập. Hãy thử điều này:

<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <ExposeHeader>Access-Control-Allow-Origin</ExposeHeader> 
    <ExposeHeader>Access-Control-Allow-Methods</ExposeHeader> 
</CORSRule>