2016-01-05 7 views
6

Ho riscontrato un problema in molti dei miei siti che si basano su S3 come origine per Cloudfront. Tuttavia, sto riscontrando problemi con la concessione di domini multipli (invece di uno * globale consentito).AWS: Come posso consentire più domini in una configurazione S3 CORS?

Ho seguito la documentazione here (prima configurazione). E trovato qualche altra risposta casuale SO o forum qui e là (seconda configurazione)

Qualsiasi aiuto è apprezzato.

Ho installato CORS regole che sembrano entrambe le seguenti:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>https://example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>HEAD</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>http://example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>https://staging.example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>http://example.dev</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

E

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>https://example.com</AllowedOrigin> 
     <AllowedOrigin>http://example.com</AllowedOrigin> 
     <AllowedOrigin>https://staging.example.com</AllowedOrigin> 
     <AllowedOrigin>http://example.dev</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>HEAD</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

continuo a ricevere l'errore all'origine del carattere su tutti i siti eccezionehttps://example.com:

Il font dell'origine 'http://CLOUDFRONTURL' è stato bloccato dal caricamento del criterio di condivisione delle risorse incrociate: Nessuna intestazione 'Access-Control-Allow-Origin-' è presente sulla risorsa richiesta. L'origine 'http://example.dev' non è quindi consentita l'accesso.

E

carattere di origine 'http://CLOUDFRONTURL' è stato bloccato dal caricamento dalla politica di condivisione delle risorse Cross-Origin: Il 'Access-Control-Allow-Origin' intestazione ha un valore 'https://example.com' che non è uguale all'origine fornita L'origine 'http://example.dev' non è quindi consentita l'accesso.

+0

La distribuzione di CloudFront è configurata per autorizzare l'intestazione della richiesta 'Origin'? –

+0

@ Michael-sqlbot Non so da che parte controllare. La modifica dell'origine non produce alcunché correlato all'intestazione della richiesta di origine whitelisting. – Dez

+0

È un'impostazione di comportamento della cache, piuttosto che un'impostazione di origine; vedi http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web –

risposta

3

CloudFront memorizza nella cache gli oggetti in base alla tutte delle intestazioni di richiesta che ha trasmesso dal browser al server di origine - non solo il percorso.

Per ricevere una risposta dalla cache, è necessario che sia stata restituita in risposta a una richiesta precedente che riguardava esattamente le intestazioni della stessa richiesta.

Questo perché, in linea di principio, diverse intestazioni possono attivare un comportamento diverso da parte del server e una cache ben educata non è libera di assumere altrimenti.

Per aumentare la cacheability di oggetti senza compromettere la sua capacità di servire corretti risposte (cioè, la risposta identico il server di origine sarebbe tornato per una data richiesta), CloudFront spoglia quasi delle intestazioni di richiesta prima di inoltrare la richiesta al l'origine e utilizza la versione ridotta della richiesta quando esegue ricerche cache.

Quando il server di origine è un'origine "Personalizzata" (vale a dire, non S3), è possibile scegliere le intestazioni da inoltrare al server di origine.

Ma quando il server di origine è S3, si hanno ancora delle scelte, ma ce ne sono solo tre che possono essere inoltrate facoltativamente ... e sono tutte correlate CORS.

[Con un'origine S3,] è possibile configurare CloudFront di trasmettere e memorizzare nella cache gli oggetti basati solo su tre intestazioni: Access-Control-Request-Headers, Access-Control-Request-Method e Origin. L'inoltro di queste intestazioni consente a CloudFront di distribuire i contenuti per i siti Web abilitati per la condivisione delle risorse tra origini diverse (CORS). Non è possibile configurare CloudFront per inoltrare intestazioni personalizzate su Amazon S3.

Se l'intestazione Origin:, almeno, non ottiene inoltrato, poi S3 non sarà in grado di reagire ad esso. Abilitare l'inoltro di questa intestazione significa che non solo S3 lo vedrà, e potenzialmente modificherà la sua risposta a causa della configurazione CORS sul bucket, ma anche che ogni variazione di Origin: - per lo stesso oggetto - risulterà in un diverso (e corretto) risposta restituita da S3 e memorizzata nella cache per future richieste di corrispondenza da parte di CloudFront.

Le intestazioni personalizzate non possono essere inoltrate a S3 da CloudFront perché ciò non servirebbe a nulla - poiché S3 memorizza il contenuto statico, le risposte non varierebbero su altre intestazioni, quindi l'inoltro non sarebbe inutile e ridurrebbe il colpo di cache tasso, con molte (presumibilmente) risposte diverse che vengono memorizzate nella cache, ma solo in risposta a richieste che erano accompagnate da intestazioni identiche.