Sto riscontrando un problema con Chrome che non riesco a capire appieno, sono curioso di sapere se la gente lo ha già trattato prima. Questo non si riproduce in Firefox. I passi sono i seguenti:Chrome + cache CORS + - richiesta dello stesso file da due origini diverse
Inizio incognito Chrome, passare a https://foo.mysite.com e avere il JS nella pagina di effettuare una richiesta GET Ajax per S3 per https://s3.amazonaws.com/mystuff/file.json. Si ottiene di nuovo una risposta 200 con:
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
Aprire una seconda scheda, passare al https://bar.mysite.com e avere i suoi JS fanno una richiesta GET Ajax a S3 per lo stesso file https://s3.amazonaws.com/mystuff/file.json. Ottenere indietro la seguente risposta 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
Aprire una terza scheda, passare al https://foo.mysite.com (il primo sito) e ripetere la stessa procedura in 1. Chrome uccide la risposta per motivi CORS e riporta la seguente:
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.
Qual è la storia qui? Questo non si riproduce in Firefox. In Firefox sto ottenendo felicemente un 304 in entrambi i passaggi 2 e 3, che mi aspetto di vedere anche in Chrome.
Una soluzione temporanea per questo problema in Chrome è quello di impostare Cache-Control: no-cache sul file in S3, ma poi sto forzando i nostri clienti di essere ri-scaricando il file per nessuna buona ragione, quindi non è una soluzione reale.
Comportamento previsto e documentato? È un bug con Chrome? Qualche altro pensiero?
Questa suoni come un problema di caching del proxy, tranne per il fatto che l'intestazione 'Vary' è impostata sulla risposta, il che dovrebbe impedire il problema del caching del proxy. Puoi controllare e condividere le intestazioni di risposta sulla risposta n. 3 (la risposta negativa)? – monsur
La richiesta non viene mai ricevuta dal server perché Chrome annulla la richiesta. Mostra le intestazioni delle richieste provvisorie e le migliori e quelle non sono di grande aiuto. Ho cercato di capire se catturare tramite chrome: // net-internals avrebbe portato a vedere la risposta, ma non ha mai superato la richiesta. –
s/richiesta/risposta/nella prima frase sopra. –