2008-08-19 19 views
13

Làm cách nào để thuyết phục Firefox (3.0.1, nếu có vấn đề) gửi tiêu đề If-Modified-Since trong yêu cầu HTTPS? Nó sẽ gửi tiêu đề nếu yêu cầu sử dụng đồng bằng HTTP và máy chủ của tôi dutifully vinh danh nó. Nhưng khi tôi yêu cầu cùng một tài nguyên từ cùng một máy chủ bằng HTTPS thay vào đó (tức là, chỉ cần thay đổi http: // trong URL thành https: //) thì Firefox không gửi tiêu đề If-Modified-Since. Hành vi này có được yêu cầu bởi thông số SSL hay gì đó không?Thuyết phục Firefox gửi tiêu đề If-Modified-Since qua HTTPS

Dưới đây là một số ví dụ HTTP và HTTPS cặp request/response, kéo sử dụng phần mở rộng Live HTTP Headers Firefox, với một số khác biệt in đậm:

yêu cầu HTTP/response:

http://myserver.com:30000/scripts/site.js 

GET /scripts/site.js HTTP/1.1 
Host: myserver.com:30000 
User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
If-Modified-Since: Tue, 19 Aug 2008 15:57:30 GMT 
If-None-Match: "a0501d1-300a-454d22526ae80"-gzip 
Cache-Control: max-age=0 

HTTP/1.x 304 Not Modified 
Date: Tue, 19 Aug 2008 15:59:23 GMT 
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=99 
Etag: "a0501d1-300a-454d22526ae80"-gzip 

HTTPS yêu cầu/phản hồi:

https://myserver.com:30001/scripts/site.js 

GET /scripts/site.js HTTP/1.1 
Host: myserver.com:30001 
User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 

HTTP/1.x 200 OK 
Date: Tue, 19 Aug 2008 16:00:14 GMT 
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8 
Last-Modified: Tue, 19 Aug 2008 15:57:30 GMT 
Etag: "a0501d1-300a-454d22526ae80"-gzip 
Accept-Ranges: bytes 
Content-Encoding: gzip 
Content-Length: 3766 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/javascript

CẬP NHẬT: Đặt số browser.cache.disk_cache_ssl thành sự thật (có nghĩa là vì Nickolay chỉ ra, vẫn còn bộ nhớ cache). Thêm tiêu đề "Cache-control: public" vào phản hồi cũng đã hoạt động. Cảm ơn!

Trả lời

14

Yêu cầu HTTPS không được lưu vào bộ nhớ cache để gửi If-Modified-Since không có ý nghĩa gì. Không phải bộ nhớ đệm là một biện pháp phòng ngừa an ninh.

không phải bộ nhớ đệm trên đĩa là một an ninh trước thận trọng, nhưng có vẻ như nó thực sự ảnh hưởng đến If-Modified-Since hành vi (liếc qua code).

Thử đặt tùy chọn Firefox (trong about: config) browser.cache.disk_cache_ssl đến true. Nếu điều đó hữu ích, hãy thử gửi Kiểm soát bộ nhớ cache: tiêu đề công khai trong phản hồi của bạn.


UPDATE: Firefox hành vi was changed cho Gecko 2.0 (Firefox 4) - HTTPS nội dung hiện đang được lưu trữ.

+0

Chủ yếu là đúng, nhưng trong các phiên bản hiện tại của FF, HTTPS Responses * được lưu trong bộ nhớ cache NẾU kiểm soát bộ nhớ cache: công khai được gửi. – EricLaw

+0

Vâng, đó là lý do tại sao tôi đề nghị đầu tiên kiểm tra nếu đọc mã của tôi là chính xác bằng cách lật pref và thử nghiệm, sau đó làm cho bộ nhớ cache của trình duyệt trang HTTP được phân phát bằng cách gửi tiêu đề. – Nickolay

2

Yêu cầu HTTPS không được lưu trong bộ nhớ cache để gửi Nếu được sửa đổi từ không có ý nghĩa gì. Không phải bộ nhớ đệm là một biện pháp phòng ngừa an ninh.

+0

Chúng có thể được lưu trong bộ nhớ cache nếu máy chủ gửi Cache-Control: công khai, max-age = XXX – hughw