2013-10-21 13 views
10

Ho un bucket S3 con la seguente configurazione CORS.Le intestazioni CORS di Amazon S3 vengono visualizzate solo durante OPZIONI (preflight) e non durante la richiesta GET

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

Il controllo di preflight funziona come previsto.

★ ~$ curl -i -X OPTIONS -H "Origin: http://stackoverflow.com" -H "Access-Control-Request-Method: GET" https://s3.amazonaws.com/random-stuff-ohyea/coderot.gif 
HTTP/1.1 200 OK 
x-amz-id-2: H6tzMUCJtYgiCRrhj5DucMhjjYtj1kKWqL7u2yaRGEorOeKhu/sTKlgGqY7uHxQC 
x-amz-request-id: E784C4373565CBE6 
Date: Mon, 21 Oct 2013 22:14:18 GMT 
Access-Control-Allow-Origin: http://stackoverflow.com 
Access-Control-Allow-Methods: GET 
Access-Control-Max-Age: 3000 
Access-Control-Allow-Credentials: true 
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method 
Content-Length: 0 
Server: AmazonS3 

Tuttavia l'intestazione di origine su una richiesta GET no.

★ ~$ curl -iI -H "Origin: http://stackoverflow.com" https://s3.amazonaws.com/random-stuff-ohyea/coderot.gif 
HTTP/1.1 200 OK 
x-amz-id-2: KlrSviRSwq/40zPwOGp2/lJZk0J2Fyu7kOg966osOvQ2mpbpiv5BLkihGSOfoLd8 
x-amz-request-id: 9D051B0001F48AB7 
Date: Mon, 21 Oct 2013 22:11:57 GMT 
Last-Modified: Mon, 21 Oct 2013 22:10:53 GMT 
ETag: "4fa16333380378e116479646b40dd1ee" 
Accept-Ranges: bytes 
Content-Type: image/gif 
Content-Length: 1774246 
Server: AmazonS3 

Questo è importante perché Firefox non sembra fare preflight durante il caricamento di font remoti che ho nel mio secchio S3. Sembra solo di inviare l'intestazione di origine.

+2

Ulteriore debug mostra che se includo un'intestazione "Access-Control-Request-Method: GET" nella mia richiesta get ottengo le intestazioni CORS corrette indietro, tuttavia Firefox non lo fa. – reconbot

+1

Una richiesta GET non elaborata per impostazione predefinita non esegue un controllo Preflight. [Spec. W3] (http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0), [MDN] (https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS # Preflighted_requests) –

risposta

4

Con l'opzione curl -iI, si eseguirà una richiesta HEAD e non una richiesta GET. Quindi non otterrai le intestazioni CORS. Per semplificare i test, aggiungi <AllowedMethod>HEAD</AllowedMethod> alla tua configurazione CORS e otterrai i risultati attesi.

Problemi correlati