2013-01-23 9 views
5

Sto ospitando un sito Web statico tramite Amazon S3 e ho alcuni Javascript su di esso che effettueranno una chiamata a un altro dominio e analizzeranno XML, JSON o qualsiasi altra cosa.Configurazione di Amazon S3 CORS XMLHttpRequest GET

Ho seguito i molti post su StackOverflow e vari post di blog a cui si riferiva per farlo funzionare ma anche dopo aver seguito molto da vicino non avrei mai potuto replicare i risultati.

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

Ho anche provato ad aggiungere con e senza la seguente alla regola,

<AllowedHeader>*</AllowedHeader> 

Il seguente link vi permette di testare se CORS è abilitata per XMLHttpRequests invio e si dice che non è valido così CORS non è impostato o riconosciuto correttamente.

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

Una possibile piombo è ciò che viene suggerito in Amazon S3 documentazione qui,

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

che dice che abbiamo bisogno di impostare il "s3: GetCORSConfiguration" il permesso, che ho fatto attraverso un linea come ...

"Azione": [ "S3: GetObject", "S3: GetCORSConfiguration"],

nella sezione "modifica criterio bucket" dal pannello di controllo AWS ma genera un errore e non può salvare perché non riconosce questa azione?

Un potenzialmente simile post su StackExchange qui,

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

sembra suggerire che se ho un sito web ospitato su S3 che non può configurarlo per fare XMLHttpRequests che arriva a una risorsa 3a parte ?

Mi sento come se stessi andando in circolo ... qualcuno là fuori ha qualche consiglio/consiglio? Grazie.

risposta

0

Penso che tu sia confuso o che io abbia letto male la tua domanda.

Abilita CORS sul tuo sito in modo che altri siti possano effettuare richieste alla tua pagina.

Abilitare CORS sul tuo sito S3 consentirà a example.com di parlare con la tua pagina S3. Non consente al tuo sito di parlare con example.com.

Per poter effettuare richieste ad altri domini, devono abilitare i privilegi. Non puoi magicamente accenderlo per i loro domini. È come dire che dai il permesso a te stesso di entrare nella serra e usare il bagno del presidente. Quando si salta la recinzione, il servizio segreto negherà tale richiesta con la forza.

+0

haha, grazie per la risposta, ho potuto essere scambiato ... ma io sono così confusa che non sono solo sicuro ... $ GetJSON ("https: // api.github.com/users/githubuser/events ") Funziona bene su un server di test su dire il mio desktop (o anche da altri miei siti Web se faccio attraverso la console di sviluppo di Chrome) ma quando provo a fare lo stesso chiamare dopo aver caricato quel sito Web su Amazon S3, quindi non funziona perché ottengo l'errore XMLHttpRequests. Logicamente questo mi suggerisce che ha qualcosa a che fare con la mia configurazione sul bucket Amazon S3 poiché ha funzionato in un ambiente di test e su determinati siti web? –

0

Ci potrebbe essere qualche relazione qui con l'esempio che abbiamo appena esaminato sulle nostre app che era correlato al https che era una configurazione hardcoded su alcune macchine dei nostri clienti. Non so esattamente cosa significhi, ma potrebbe essere un posto dove controllare.

invece di http: // provare https: //

XMLHttpRequest to Amazon S3 fails only on some computers

0

si deve esporre le intestazioni di controllo di accesso. Prova questo:

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