2017-07-24 11 views
1

Wir verwenden Amazon S3 + CloudFront für die Bereitstellung von JSON-Dateien. Wir haben zwei Dateien hochgeladen, die wir als j1.json und j2.json betrachten können. Beide Dateien reagieren anfänglich mit gültigen CORS-Headern in der Antwort, aber bei der Ausführung von invalidation auf j2.json haben sich die Headerantworten geändert, und wir sehen uns einem CORS-Problem gegenüber.Amazon S3 + CloudFront CORS Problem

CORS Berechtigungen auf Eimer S3 -

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

Response-Header für j1.json

enter image description here

Response-Header für j2.json enter image description here

Beide JSON-Dateien in der gleicher Bucket, aber j2.json Antwort fehlt diese Header

Wir haben versucht, wieder Objekt zu löschen und hochzuladen, es reagiert nicht CORS-Header in der Antwort. Was ist der mögliche Grund für dieses Problem? Und wie löst man es?

+0

Löschen Sie Ihren Browser-Cache und versuchen Sie es in anderen Browsern. Die wahrscheinlichste Erklärung, wenn dies passiert, ist eine veraltete Cache-Kopie einer Datei – sideshowbarker

+0

@sideshowbarker Wir haben bereits verschiedene Browser ausprobiert, löschen Cache und Hard Reload. Gleiches von Postman auch. Bisher kein Glück. – RockStar

+2

Ist die CloudFront-Verteilung so konfiguriert, dass sie 'Access-Control-Request-Header',' Access-Control-Request-Method' und 'Origin'-Header an S3 weiterleitet (im" Cache-Verhalten ")? Senden Sie beim Testen mit Postboten einen 'Origin:' Header (und die anderen)? Können Sie URLs anzeigen? –

Antwort

3

Bevor S3 korrekte CORS-Antwortheader zurückgibt, muss es sehen, dass die Anfrage eine CORS-Anfrage ist.

CloudFront leitet standardmäßig so wenige Header wie möglich an den Ursprung weiter, da je weniger Header der Ursprung benötigt, desto besser ist die Cache-Trefferrate (weil kein Header an den Ursprung gesendet werden kann) der Ursprung, um seine Antwort zu variieren, daher würde erwartet werden, dass alle Antworten auf eine gegebene Anfrage nicht variieren und somit zwischengespeichert werden können). Aber für eine CORS-Anfrage brauchen wir S3, um einige spezifische Header zu sehen, damit es entsprechend reagieren kann.

In der Cache-Verhalten-Konfiguration müssen Sie diese drei Anforderungsheader für die Weiterleitung an den Ursprung auf die weiße Liste setzen.

Access-Control-Request-Headers 
Access-Control-Request-Method 
Origin 

Sobald diese Änderung abgeschlossen ist, ist möglicherweise auch eine Ungültigmachung sinnvoll.

Verwandte Themen