2015-07-26 17 views
7

Sto implementando un'API REST che dovrebbe supportare richieste interdominio. Usando CORS voglio raggiungere questo obiettivo. Quasi tutte le mie richieste sono "non semplici", ovvero per tutte le richieste non GET una richiesta di preflight deve essere inviata dal browser.Preflight per la cache non in cromo

Per limitare la quantità di richieste di preflight/OPTIONS, provo a lasciare che il browser memorizzi le richieste OPTIONS. Questo sembra funzionare in Firefox e Safari, ma non in Chrome. So che Chrome memorizzerà solo le richieste di verifica preliminare in cache per soli 10 minuti, ma nel mio caso sembra che non ci sia alcun caching.

Queste sono le richieste HTTP e le risposte inviati/ricevuti da Chrome:

Richiesta:

OPTIONS /api/v1/sessions HTTP/1.1 
Host: xxxxxxx 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Access-Control-Request-Method: POST 
Origin: http://localhost:8000 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 
Access-Control-Request-Headers: content-type 
Accept: */* 
Referer: http://localhost:8000/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 

Risposta:

HTTP/1.1 200 OK 
Date: Sun, 26 Jul 2015 09:33:27 GMT 
Server: Apache/2.4.7 (Ubuntu) 
X-Powered-By: PHP/5.5.9-1ubuntu4.9 
Cache-Control: private, max-age=1440, pre-check=1440 
Access-Control-Allow-Origin: http://localhost:8000 
Access-Control-Allow-Methods: GET,POST,PATCH,DELETE 
Access-Control-Max-Age: 86400 
Access-Control-Allow-Headers: content-type 
Content-Length: 0 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=utf-8 
+0

hai 'Pragma: no-cache' e' Cache-Control: no-cache' impostato nella richiesta .. prova a rimuovere quelli dalla richiesta – harishr

+0

Sì, ma non li imposto esplicitamente. Chrome invia quelli nella richiesta, come faccio a rimuoverlo? – user23127

+0

Ho controllato le mie richieste API in chrome e quell'intestazione della richiesta non è stata passata. Quindi dubito che chrome sia di per sè le impostazioni, è necessario controllare il codice da dove vengono impostati – harishr

risposta

9

avete Pragma: no-cache & Cache-Control: no-cache set nella richiesta .. prova a rimuovere quelli dalla richiesta.

richieste API di default non imposta quelli intestazione .. quindi dubito cromo di per sé è impostazioni quelli, è necessario controllare il codice da dove stanno ottenendo impostati ...

dato che il suo bel lavoro in altri browser controllano se hai impostato l'opzione no-cache negli strumenti dev

+0

La migliore risposta di sempre, tutti abbiamo abilitato questa opzione. =) – Olga

+0

Vorrei aver trovato questo 1 ora fa, geniale! –