2011-09-27 24 views
6

Tôi có một mớ hỗn độn với tiêu đề này, tôi đã đọc rằng yêu cầu Cache-Control:must-revalidate để xác thực tất cả các yêu cầu với nguồn trước khi phục vụ mục được lưu trong bộ nhớ cache, nhưng chỉ là mục cũ? hoặc tất cả không có vấn đề nếu cũ hoặc tươi? Tôi đã đọc cả hai thứ ở những nơi khác nhau.Kiểm soát bộ nhớ cache: phải xác thực lại nghĩa vụ xác thực tất cả các yêu cầu hoặc chỉ những yêu cầu cũ?

sự khác biệt với Cache-Control:no-cache là gì? Bởi vì các tiêu đề này trông tương đương với tôi.

UPDATE 1: Tôi đã đọc điều này từ một cuốn sách:

Tiêu đề Cache-Control: must-revalidate phản ứng nói với bộ nhớ cache để bỏ qua các cơ chế tính tươi mới và hợp lệ lại trên mỗi truy cập:

@ Peter O. đã chỉ ra những gì các RFC nói. Vì vậy, cuốn sách cũ là sai.

UPDATE 2: Trong hướng dẫn này: http://www.mnot.net/cache_docs/

no-cache - lực lượng bộ nhớ đệm để gửi yêu cầu đến máy chủ gốc để xác nhận trước khi phát hành một bản sao lưu trữ, mọi lúc. Đây là hữu ích để đảm bảo rằng xác thực được tôn trọng (kết hợp với công khai), hoặc để duy trì độ tươi cứng nhắc, mà không phải hy sinh tất cả các lợi ích của bộ nhớ đệm là .

must-revalidate - thông báo với bộ nhớ cache rằng họ phải tuân theo mọi thông tin về độ tươi mà bạn cung cấp cho họ về đại diện. HTTP cho phép bộ nhớ cache phục vụ các đại diện cũ trong các điều kiện đặc biệt ; bằng cách chỉ định tiêu đề này, bạn đang nói với bộ nhớ cache rằng bạn muốn nó tuân thủ nghiêm ngặt các quy tắc của bạn.

Trả lời

10

Mục 14.9.4 của HTTP/1.1:

Khi chỉ thị phải xác nhận lại hiện diện trong một phản ứng nhận bởi một bộ nhớ cache, bộ nhớ cache mà PHẢI KHÔNG sử dụng mục sau khi nó trở nên cũ để trả lời yêu cầu tiếp theo mà không cần xác minh lại yêu cầu với máy chủ gốc gốc

Mục 14,8 HTTP/1.1:

Nếu câu trả lời bao gồm các "-phải xác nhận lại" bộ nhớ cache kiểm soát chỉ thị, bộ nhớ cache CÓ THỂ sử dụng phản ứng trong trả lời một yêu cầu tiếp theo . Nhưng nếu câu trả lời là cũ, tất cả các bộ nhớ đệm PHẢI đầu tiên hợp lệ lại nó với máy chủ gốc ...

Vì vậy, có vẻ như chỉ phản ứng cũ phải được xác nhận lại nếu must-revalidate nhận được.

Đối no-cache, xem phần 14.9.1:

Nếu chỉ thị no-cache không xác định một lĩnh vực tên [đó là trường hợp đây], sau đó một bộ nhớ cache PHẢI KHÔNG sử dụng các phản ứng để đáp ứng một yêu cầu tiếp theo mà không cần kiểm tra hợp lệ thành công với máy chủ gốc ...

Như vậy, no-cache áp dụng cho cả phản ứng tươi và cũ.

EDIT:

Cụm từ này có thể liên quan ở đây (phần 13.3):

Khi một bộ nhớ cache có một mục cũ mà nó muốn sử dụng như một phản ứng yêu cầu của khách hàng, nó trước tiên phải kiểm tra với máy chủ gốc (hoặc có thể là bộ nhớ đệm trung gian với phản hồi mới) để xem liệu mục được lưu trong bộ nhớ cache của nó vẫn có thể sử dụng được hay không.

Vì vậy, must-revalidate có lẽ có liên quan khi bộ nhớ cache có trung gian cache, vì nếu không thì bộ nhớ cache có thể kiểm tra bộ nhớ cache trung gian cho một phản ứng tươi chứ không phải là kiểm tra các máy chủ gốc trực tiếp.

+0

Cảm ơn. Tôi đã cập nhật các bài viết với những gì tôi đọc trong một cuốn sách bởi vì tôi không thể đặt nó trên một bình luận, đó là trái ngược với những gì bạn tìm thấy trên RFC. Bạn nghĩ sao? – vtortola

+0

ok sách đã sai. trong phiên bản mới của cuốn sách đó, nó nói những gì bạn nói. Cảm ơn! – vtortola

+2

Tôi vẫn còn bối rối. Tôi muốn lưu trữ tài nguyên của mình, ngoại trừ khi tài nguyên được cập nhật lên phiên bản mới hơn trên máy chủ của tôi. Tôi đã đọc không có bộ nhớ cache đã được dự định cho điều đó, nhưng một số trình duyệt sử dụng nó như là không lưu trữ thay thế. Vậy bây giờ tôi sẽ đạt được hành vi này như thế nào? Tôi có thể làm điều đó bằng cách sử dụng phải xác nhận lại không? –

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