2012-10-16 43 views
110

Khi tôi ghé thăm chesseng.herokuapp.com tôi nhận được một phản ứng tiêu đề giống nhưCache-Control là gì: riêng tư?

Cache-Control:private 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Type:text/css 
Date:Tue, 16 Oct 2012 06:37:53 GMT 
Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT 
Status:200 OK 
transfer-encoding:chunked 
Vary:Accept-Encoding 
X-Rack-Cache:miss 

và sau đó tôi làm mới trang và nhận được

Cache-Control:private 
Connection:keep-alive 
Date:Tue, 16 Oct 2012 06:20:49 GMT 
Status:304 Not Modified 
X-Rack-Cache:miss 

nên nó có vẻ như bộ nhớ đệm đang làm việc. Nếu tính năng này hoạt động để lưu vào bộ nhớ cache thì điểm là gì của số Hết hạnCache-Control: max-age. Để thêm vào sự nhầm lẫn, khi tôi kiểm tra trang tại https://developers.google.com/speed/pagespeed/insights/, nó cho tôi biết "Tận dụng bộ nhớ đệm của trình duyệt".

Trả lời

143
Cache-Control: private 

Chỉ ra tất cả hoặc một phần của thông điệp trả lời là để dành cho một người dùng duy nhất và không được lưu trữ bởi một bộ nhớ cache chia sẻ, chẳng hạn như một máy chủ proxy.

Từ RFC2616 section 14.9.1

+1

Vì vậy, bạn có thể giải thích tại sao phản hồi sau khi làm mới có Trạng thái: 304 Không được sửa đổi – user782220

+11

Do trình duyệt của bạn đã lưu trong bộ nhớ cache. Bạn là người dùng duy nhất phản hồi được dự định. –

+1

Vì vậy, không có mỗi bộ nhớ cache người dùng duy nhất nó có hiệu quả giống như Hết hạn hoặc Bộ nhớ cache-Kiểm soát: độ tuổi tối đa. – user782220

14

RFC 2616, section 14.9.1:

Chỉ ra tất cả hoặc một phần của thông điệp trả lời là để dành cho một người dùng duy nhất và không được lưu trữ bởi một bộ nhớ cache chia sẻ ... Bộ nhớ cache riêng tư (không chia sẻ) CÓ THỂ lưu trữ phản hồi.


Trình duyệt có thể sử dụng thông tin này. Tất nhiên, "người dùng" hiện tại có thể có nhiều ý nghĩa: người dùng hệ điều hành, người dùng trình duyệt (ví dụ: hồ sơ của Chrome), v.v. Nó không được chỉ định.

Đối với tôi, một ví dụ cụ thể hơn của Cache-Control: private là các máy chủ proxy (thường có nhiều người dùng) sẽ không lưu bộ nhớ cache. Nó có nghĩa là cho người dùng cuối, và không có ai khác.


FYI, RFC làm rõ rằng điều này không cung cấp bảo mật. Đó là về hiển thị nội dung chính xác, không bảo mật nội dung.

Việc sử dụng riêng tư này chỉ kiểm soát nơi phản hồi có thể được lưu vào bộ nhớ cache và không thể đảm bảo quyền riêng tư của nội dung thư.

+5

** Bộ nhớ cache riêng (không dùng chung) CÓ THỂ cache câu trả lời. ** Phần này là chìa khóa. Cảm ơn. – Oliver

0

Trường tiêu đề thực thể hết hạn cho biết ngày/giờ sau đó phản hồi được coi là cũ.Điều khiển bộ nhớ cache: trường tối đa cho giá trị độ tuổi (tính bằng giây) lớn hơn phản hồi được xem là cũ.

Mặc dù trường tiêu đề phía trên cung cấp cơ chế cho khách hàng để quyết định có gửi yêu cầu đến máy chủ hay không. Trong một số điều kiện, khách hàng gửi một yêu cầu để cắt đứt và giá trị tuổi của phản ứng lớn hơn sau đó giá trị tối đa, liều nó có nghĩa là máy chủ cần phải gửi tài nguyên cho khách hàng? Có lẽ tài nguyên không bao giờ thay đổi.

Để giải quyết vấn đề này, HTTP1.1 cung cấp cho đầu được sửa đổi lần cuối. Máy chủ cung cấp ngày sửa đổi cuối cùng của phản hồi cho máy khách. Khi máy khách cần tài nguyên này, nó sẽ gửi trường Head-If-Modified-Since đến máy chủ. Nếu ngày này là trước ngày sửa đổi của resouce, máy chủ sẽ gửi tài nguyên cho khách hàng và cung cấp cho 200 mã.Nếu không, nó sẽ trả về mã 304 cho máy khách và điều này có nghĩa là máy khách có thể sử dụng tài nguyên được lưu trữ.

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