7

Recentemente ho abilitato Amazon S3 + CloudFront a fungere da CDN per la mia applicazione rails. Per utilizzare i font e visualizzarli in Firefox o IE, devo abilitare CORS sul mio bucket S3.Amazon S3 ha bisogno di tempo per aggiornare le impostazioni CORS? Per quanto?

<?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> 

Poi ho usato curl -I https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz, ho ottenuto:

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 

Dovrei vedere 'Access-Control-Allow-Origin' alcuni dove? S3 richiede tempo per aggiornare le impostazioni CORS? Posso forzare le intestazioni in scadenza se le metti in cache?

+0

essere sicuri di avere identificato il problema, se non si vede CORS abbiano effetto. http://docs.aws.amazon.com/AmazonS3/latest/dev/cors-troubleshooting.html Idealmente non dovrebbe richiedere troppo tempo. L'ho visto fare circa un paio di minuti prima. – Keshi

risposta

4

Provare a inviare l'intestazione Origine:

$ 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 

L'uscita dovrebbe quindi mostrare le intestazioni di risposta CORS che stai cercando:

< 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 

Per ulteriori informazioni su come eseguire il debug richieste CORS con l'arricciatura può essere trovato qui: How can you debug a CORS request with cURL?

Si noti che ci sono diversi tipi di richieste CORS (semplice e preflight) , un bel tutorial sulle differenze può essere trovato qui: http://www.html5rocks.com/en/tutorials/cors/

Spero che questo aiuti!

1

provare questi:

  1. Prova a portata verso il basso i nomi di dominio che si desidera consentire l'accesso a. A S3 non piace *.
  2. CloudFront + S3 doesn't handle the CORS configuration correctly fuori dalla scatola. Un kludge deve aggiungere una stringa di query contenente il nome del dominio di riferimento e abilitare esplicitamente il supporto per le stringhe di query nelle impostazioni di distribuzione di CloudFront.
0

Hai qualche problema con il tuo modo di provare CORS. 1. La vostra configurazione CORS non ha un metodo HEAD. 2. Il comando curl non ha l'intestazione -H.

Sono in grado di ottenere i dati utilizzando il ricciolo come segue. Tuttavia hanno scaricato spazzatura sul mio schermo perché i dati sono compressi in binario.

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

Problemi correlati