2013-01-23 15 views
5

Hostuję statyczną stronę internetową za pośrednictwem Amazon S3 i mam tam trochę kodu JavaScript, który wywoła połączenie z inną domeną i przeanalizuje kod XML, JSON lub cokolwiek, co otrzyma.Konfiguracja Amazon S3 CORS XMLHttpRequest GET

Śledziłem wiele postów na stackoverflow i różnych blogach, które były powiązane z tymi, które twierdziły, że działają, ale nawet po tym jak podążam bardzo uważnie, nigdy nie będę w stanie powtórzyć wyników.

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

Próbowałem nawet dodawanie i bez następujące reguły,

<AllowedHeader>*</AllowedHeader> 

Poniższy link umożliwia sprawdzenie, czy CORS jest włączona przez wysyłających XMLHttpRequests i mówi, że to nie jest ważne tak CORS nie jest prawidłowo skonfigurowany lub rozpoznany.

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

Możliwym ołowiu, co jest sugerowane w dokumentacji Amazon S3 Tutaj

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

który mówi, że trzeba ustawić "s3: GetCORSConfiguration" pozwolenie, które zrobiłem za pośrednictwem linia jak ...

"Action": [ "s3: GetObject", "s3: GetCORSConfiguration"],

w sekcji "edytuj zasady zasobnika" z panelu sterowania AWS, ale wyświetla błąd i nie może zapisać, ponieważ nie rozpoznaje tej akcji?

Potencjalnie podobny post Stack Exchange Network Tutaj

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

zdaje się sugerować, że jeśli mam stronę internetową hostowane na S3, że nie można go skonfigurować, aby XMLHttpRequests które są dostać się do 3rd zasobu partii ?

Czuję, że idę w kółko ... Czy ktoś ma jakieś wskazówki/porady? Dzięki.

Odpowiedz

0

Myślę, że jesteś zdezorientowany lub źle odczytałem twoje pytanie.

Włączasz CORS w swojej witrynie, aby inne witryny mogły wysyłać żądania do Twojej strony.

Włączenie CORS w witrynie S3 umożliwi witrynie example.com rozmowę ze stroną S3. To nie pozwala Twojej witrynie rozmawiać z example.com.

Aby móc wysyłać żądania do innych domen, muszą one włączyć uprawnienia. Nie możesz magicznie włączyć go dla swoich domen. To tak, jakby powiedzieć, że dajesz pozwolenie, aby wejść do domu i korzystać z łazienki prezydenta. Kiedy przeskoczysz płot, tajna służba odrzuci tę prośbę z siłą.

+0

haha, dzięki za odpowiedzi, mogę się mylić ... ale jestem tak zdezorientowany, że po prostu nie jestem pewna ... $ .getJSON ("https: // api.github.com/users/githubuser/events ") Działa dobrze na serwerze testowym, powiedzmy na moim pulpicie (lub nawet z moich innych witryn, jeśli przejdę przez konsolę programisty Chrome), ale gdy próbuję zrobić to samo zadzwoń po tym, jak załadowałem tę stronę do Amazon S3, to nie działa, ponieważ dostaję błąd XMLHttpRequest. Logicznie sugeruje to, że ma to coś wspólnego z moją konfiguracją na wiadrze Amazon S3, ponieważ działa ona w środowisku testowym i na niektórych stronach internetowych? –

0

Może być jakiś związek z przykładem, nad którym właśnie pracowaliśmy przy naszych aplikacjach, który był związany z https, który był konfiguracją zakodowaną na niektórych komputerach naszych klientów. Nie wiem dokładnie, co to oznacza, ale może to być miejsce do sprawdzenia.

zamiast http: // próbować https: //

XMLHttpRequest to Amazon S3 fails only on some computers

0

Trzeba wystawiać nagłówki kontroli dostępu. Spróbuj tego:

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