2015-07-26 36 views
7

Implementuję interfejs REST API, który powinien obsługiwać żądania w różnych domenach. Korzystając z CORS, chcę to osiągnąć. Niemal wszystkie moje żądania są "nie-proste", co oznacza, że ​​dla wszystkich żądań innych niż GET, żądanie wstępne musi zostać wysłane przez przeglądarkę.Chrome nie buforuje preflight

Aby ograniczyć ilość żądań preflight/OPTIONS, próbuję pozwolić przeglądarce na buforowanie żądań OPTIONS. To wydaje się działać w przeglądarkach Firefox i Safari, ale nie w Chrome. Wiem, że Chrome będzie buforował żądania wstępne tylko przez 10 minut, ale wydaje mi się, że w ogóle nie ma buforowania.

Są żądań i odpowiedzi HTTP wysłanych/odebranych przez Chrome:

Zapytanie:

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 

Response:

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

masz w pamięci żądanie 'Pragma: no-cache' i' Cache-Control: no-cache'. spróbuj usunąć je z żądania – harishr

+0

Tak, ale nie ustawiam ich wyraźnie. Chrome wysyła te żądania, w jaki sposób mogę to usunąć? – user23127

+0

Sprawdziłem moje żądania api w chrome i nagłówek tego żądania nie jest przekazywany .. więc wątpię w chrome same w sobie ustawienia te, musisz sprawdzić kod z którego się ustawiają – harishr

Odpowiedz

9

masz Pragma: no-cache & Cache-Control: no-cache określone we wniosku .. spróbuj usunąć te z żądania.

wywołań API domyślnie nie ustawia te nagłówek .. więc wątpię chrom sama jest te ustawienia, należy sprawdzić kod, z którego są one coraz ustawić ...

zważywszy, że jego praca w porządku inne przeglądarki sprawdzają, czy ustawiłeś opcję braku pamięci podręcznej w narzędziach programisty

+0

Najlepsza odpowiedź w historii, wszyscy mamy tę opcję włączoną. =) – Olga

+0

Szkoda, że ​​nie znaleźliśmy tego 1 godzinę temu, genialnie! –