Mam problem z Chrome, którego nie mogę w pełni zrozumieć. Ciekawi mnie, czy ludzie już wcześniej z nim rozmawiali. To się nie powiela w Firefoksie. Kroki są następujące:Chrome + CORS + pamięć podręczna - żądanie tego samego pliku z dwóch różnych źródeł.
start incognito Chrome, przejdź do https://foo.mysite.com i mają JS na stronie złożyć zamówienie Pobierz ajax do S3 dla https://s3.amazonaws.com/mystuff/file.json. Wrócisz odpowiedź 200 ze:
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
otworzyć drugi języczek, przejdź do https://bar.mysite.com i mieć JS złożyć zamówienie Pobierz ajax do S3 dla tego samego pliku https://s3.amazonaws.com/mystuff/file.json. Wracaj następującą odpowiedź: 304
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
Otwórz zakładkę trzecie, przejdź do https://foo.mysite.com (pierwsze miejsce) i powtórzyć te same czynności, jak w 1. Chrome zabija odpowiedzi na Cors powodów i podaje następujące:
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.
co chodzi tutaj? To się nie powiela w Firefoksie. W Firefoksie z przyjemnością uzyskuję 304 w obu etapach 2 i 3, co spodziewam się zobaczyć również w Chrome.
Tymczasowym obejściem tego problemu w Chrome jest ustawienie Cache-Control: no-cache na pliku w S3, ale potem zmuszam naszych klientów do ponownego pobierania tego pliku bez ważnego powodu, więc to nie jest prawdziwe rozwiązanie.
Czy jest to zamierzone i udokumentowane zachowanie? Czy to błąd w Chrome? Jakieś inne myśli?
to brzmi podobnie jak problem z buforowaniem proxy, z tym że nagłówek 'Vary' jest ustawiony na odpowiedź, co powinno zapobiec problemowi z buforowaniem proxy. Czy możesz sprawdzić i udostępnić nagłówki odpowiedzi w odpowiedzi nr 3 (odpowiedź nieudana)? – monsur
Żądanie nie zostanie odebrane z serwera, ponieważ Chrome anuluje żądanie. Pokazuje tymczasowe nagłówki żądań i najlepsze, a te nie są zbyt pomocne. Próbowałem sprawdzić, czy być może przechwycenie przez chrome: // net-internals doprowadziłoby do zobaczenia odpowiedzi, ale też nigdy nie pominie tej prośby. –
s/żądanie/odpowiedź/w pierwszym zdaniu powyżej. –