Ich habe ein Problem mit Chrome, das ich nicht vollständig verstehen kann, ich bin neugierig, ob die Leute hier schon einmal damit umgegangen sind. Dies reproduziert sich nicht in Firefox. Die Schritte sind wie folgt:Chrome + CORS + Cache - Anfordern der gleichen Datei von zwei verschiedenen Ursprüngen
starten inkognito Chrome, navigieren Sie zu https://foo.mysite.com und haben die JS auf der Seite eine GET-Ajax-Request für https://s3.amazonaws.com/mystuff/file.json bis S3 machen. Sie erhalten wieder eine 200-Antwort mit:
HTTP/1.1 200 OK x-amz-id-2: somestuffhere x-amz-request-id: somestuffhere Date: Tue, 14 Oct 2014 03:06:41 GMT Access-Control-Allow-Origin: https://foo.mysite.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 Cache-Control: max-age=86400 Content-Encoding: gzip Last-Modified: Sun, 05 Oct 2014 00:29:53 GMT ETag: "fe76607baa40a793eb3b3cbd373a3fb8" Accept-Ranges: bytes Content-Type: application/json Content-Length: 5609 Server: AmazonS3
Öffnen Sie eine zweite Registerkarte zu https://bar.mysite.com navigieren und haben seine JS eine GET-Ajax-Anforderung für die gleiche Datei https://s3.amazonaws.com/mystuff/file.json bis S3 zu machen. Holen Sie sich das folgende 304 Antwort zurück:
HTTP/1.1 304 Not Modified x-amz-id-2: somestuffhere x-amz-request-id: somestuffhere Date: Tue, 14 Oct 2014 03:06:58 GMT Access-Control-Allow-Origin: https://bar.mysite.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 Cache-Control: max-age=86400 Last-Modified: Sun, 05 Oct 2014 00:29:53 GMT ETag: "fe76607baa40a793eb3b3cbd373a3fb8" Server: AmazonS3
Öffnen Sie eine dritte Registerkarte, navigieren Sie zu https://foo.mysite.com (die erste Seite) und wiederholen Sie die gleichen Schritte wie in 1. Chrome die Antwort für CORS Gründen tötet und meldet folgende Möglichkeiten:
XMLHttpRequest cannot load https://s3.amazonaws.com/mystuff/file.json. The 'Access-Control-Allow-Origin' header has a value 'https://bar.mysite.com' that is not equal to the supplied origin. Origin 'https://foo.mysite.com' is therefore not allowed access.
Was ist die Geschichte hier? Dies reproduziert sich nicht in Firefox. In Firefox bekomme ich glücklich eine 304 in beiden Schritten 2 und 3, die ich auch in Chrome erwarten würde.
Eine vorübergehende Lösung für dieses Problem in Chrome Cache-Control zu setzen: no-cache auf die Datei in S3, aber ich zwingen unsere Kunden dann erneut das Herunterladen ohne guten Grund, diese Datei werden, Es ist also keine echte Lösung.
Ist dies beabsichtigt und dokumentiert Verhalten? Ist das ein Bug mit Chrome? Irgendwelche anderen Gedanken?
Das klingt wie ein Proxy-Caching-Problem, außer dass der 'Vary'-Header auf die Antwort gesetzt ist, was das Proxy-Caching-Problem verhindern sollte. Können Sie die Antwortheader auf Antwort 3 (die fehlgeschlagene Antwort) überprüfen und freigeben? – monsur
Die Anforderung wird niemals vom Server empfangen, da Chrome die Anforderung abbricht. Es zeigt provisorische Anfrage Header und am besten, und diese sind nicht sehr hilfreich. Ich habe versucht zu sehen, ob vielleicht Capture durch chrome: // net-Internals hätte die Antwort zu sehen, aber es geht auch nie über die Anfrage dort. –
s/Anfrage/Antwort/im ersten Satz oben. –