2013-07-10 6 views
22

Mam problem z zmuszaniem S3 do ustawiania nagłówków CORS dla wszystkich obiektów, które zwraca z wiadra, chociaż CORS jest włączony, ponieważ ładuje się S3 po stronie klienta, zwrócone obiekty nie mają nagłówków CORS!S3 nie zwraca nagłówków Access-Control-Allow-Origin?

Polityka Mam włączone jest:

<?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> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

Przykładem obiektu URL https://s3.amazonaws.com/captionable/meme/test

Czy ktoś wie co jest nie tak?

Odpowiedz

28

Przede wszystkim upewnij się, że nagłówek Origin przy każdym żądaniu. Jeśli nie zostanie wysłany nagłówek Origin, S3 nie wyśle ​​nagłówków access-control, ponieważ S3 uzna je za nieistotne (i zazwyczaj są). Przeglądarka (dla której rozumie się mechanizm CORS) automatycznie wyśle ​​nagłówek Origin podczas wykonywania żądań HTTP cross-origin poprzez XMLHTTPRequest.

W przypadku ładowania obrazów za pomocą img, należy dodać atrybut crossorigin="anonymous". Zobacz MDN Documentation on crossorigin attribute. Spowoduje to wysłanie przez przeglądarkę nagłówka żądania Origin, podobnie jak w przypadku XMLHTTPRequest.

Przechodzenie przez odpowiedź Sam Selikoff, może trzeba zmienić

<AllowedOrigin>http://*</AllowedOrigin> 

do

<AllowedOrigin>http://*</AllowedOrigin> 
<AllowedOrigin>https://*</AllowedOrigin> 

nie testowałem tego.

Przechodząc od komentarza Paula Drapera do tej odpowiedzi: Uważaj na problemy z buforowaniem. Przeglądarka może użyć buforowanej odpowiedzi, która nie zawiera odpowiednich nagłówków odpowiedzi. Podczas programowania możesz wyczyścić pamięć podręczną. Podczas produkcji musisz przełączyć się na nowy adres URL zasobu, jeśli wcześniej był używany w sposób statyczny.

+3

I na tym polega ścieranie. Tworzyłem tag obrazu, który nie wysyła nagłówków Origin. Mimo to, spodziewałem się, że S3 zawsze będzie zwracał nagłówki CORS, ale robi to tylko wtedy, gdy jest określone "Pochodzenie". Dziękujemy za potwierdzenie, że CORS jest poprawnie skonfigurowany. –

+0

W takim przypadku wygląda na to, że powinienem ustawić atrybut crossOrigin dla tagu graficznego. Czy przypadkiem znasz sup –

+2

Nie mam żadnego doświadczenia z tym atrybutem. Ustawienie go na "anonimowy" może spowodować, że przeglądarka wyśle ​​nagłówek 'Origin'. Może wysłać osobne pytanie? –

24

Wpadłem również na to z tagiem <image>, a po wykonaniu odpowiedzi Myrne Stol dodałem tag crossorigin=anonymous do mojego tagu graficznego. Zweryfikowałem, że nagłówek Origin był rzeczywiście wysyłany do S3, ale mimo to nagłówek Access-Control-Allow-Origin nie był wysyłany w odpowiedzi.

Natknąłem się na this SO answer i udało mi się go rozwiązać. Zmieniłem AllowedOrigin w moim S3 config to:

<AllowedOrigin>http://*</AllowedOrigin> 
<AllowedOrigin>https://*</AllowedOrigin> 

i teraz S3 reaguje z nagłówkami dostępu. Yay!

+2

to jest to !!!!! wieki zastanawiałem się, dlaczego * zasady cors nie działały! – rupps

+2

@ cory-delfin Myślę, że to powinna być akceptowana odpowiedź tutaj. Też miałem ten sam problem z tagiem graficznym i naprawiłem te dwie linie. – supersan

+2

dziękuję, to najlepsza odpowiedź –

Powiązane problemy