2015-07-26 26 views
7

Tôi đang triển khai API REST hỗ trợ các yêu cầu miền chéo. Sử dụng CORS Tôi muốn đạt được điều này. Hầu như tất cả các yêu cầu của tôi là 'không đơn giản', nghĩa là đối với tất cả các yêu cầu không phải là yêu cầu preflight phải được gửi bởi trình duyệt.Chrome không lưu vào bộ nhớ cache preflight

Để giới hạn số lượng yêu cầu preflight/OPTIONS tôi cố gắng để bộ nhớ cache của trình duyệt yêu cầu OPTIONS. Điều này dường như hoạt động trong Firefox và Safari, nhưng không hoạt động trong Chrome. Tôi biết Chrome sẽ chỉ lưu trữ các yêu cầu preflight chỉ trong 10 phút, nhưng trong trường hợp của tôi, dường như không có bộ nhớ đệm nào diễn ra.

Đây là những yêu cầu HTTP và phản ứng gửi/nhận bởi Chrome:

Yêu cầu:

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 

đáp ứng:

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

bạn có 'pragma: không cache' & 'Cache-Control: no-cache' thiết trong yêu cầu .. cố gắng loại bỏ những từ yêu cầu – harishr

+0

Vâng, nhưng tôi không đặt chúng một cách rõ ràng. Chrome sẽ gửi những yêu cầu đó trong yêu cầu, làm cách nào để xóa nội dung này? – user23127

+0

Tôi đã kiểm tra các yêu cầu api của tôi trong chrome và các tiêu đề yêu cầu không được thông qua .. vì vậy tôi nghi ngờ chrome của chính nó là cài đặt, bạn cần phải kiểm tra mã của bạn từ nơi họ nhận được thiết lập – harishr

Trả lời

9

bạn có Pragma: no-cache & Cache-Control: no-cache bộ trong yêu cầu .. hãy thử xóa những người đó khỏi yêu cầu.

yêu cầu api theo mặc định không thiết lập những tiêu đề .. vì vậy tôi nghi ngờ chrome bởi chính nó là các thiết lập đó, bạn cần phải kiểm tra mã của bạn từ nơi họ nhận được thiết lập ...

cho rằng nó làm việc tốt trong các trình duyệt khác kiểm tra xem bạn đã thiết lập tùy chọn no-cache trong các công cụ dev

+0

Câu trả lời hay nhất từ ​​trước tới nay, tất cả chúng ta đều có tùy chọn đó. =) – Olga

+0

Tôi ước gì chúng tôi tìm thấy điều này 1 giờ trước, rực rỡ! –

Các vấn đề liên quan