2011-09-27 74 views
13

Tôi không tìm thấy sự khác biệt thực tế giữa Cache-Control:no-storeCache-Control:no-cache.Sự khác biệt giữa không có bộ nhớ cache và không lưu trữ trong bộ nhớ Cache-control là gì?

Theo như tôi biết, no-store có nghĩa là không có thiết bị bộ nhớ cache nào được phép lưu vào bộ nhớ cache phản hồi đó. Mặt khác, no-cache có nghĩa là không có thiết bị bộ nhớ cache nào được phép phân phối phản hồi được lưu trong bộ nhớ cache mà không xác thực nó trước tiên với nguồn. Nhưng xác nhận đó là gì? Có điều kiện nhận được?

Điều gì sẽ xảy ra nếu phản hồi có no-cache, nhưng không có Last-Modified hoặc ETag?

Trân trọng.

Trả lời

12

Nhưng kiểm tra đó là gì?

Kiểm tra chính xác Last-Modified hoặc ETag. Khách hàng sẽ yêu cầu máy chủ nếu nó có phiên bản mới của dữ liệu bằng cách sử dụng các tiêu đề và nếu câu trả lời là không có nó sẽ phục vụ dữ liệu được lưu trữ.


Cập nhật

Từ RFC

no-cache 
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use 
the response to satisfy a subsequent request without successful revalidation with the 
origin server. This allows an origin server to prevent caching even by caches that 
have been configured to return stale responses to client requests. 
+0

và nếu phản hồi được lưu trong bộ nhớ cache không có 'Sửa đổi lần cuối' hay' ETag'? – vtortola

+0

Tôi nghĩ rằng trong trường hợp này, phản hồi sẽ không được lưu trữ. –

+0

Đó là cách tôi giải thích RFC. (Đã thêm đoạn mã) –

2

Như bạn đã xác định, không có -cache không có nghĩa là không bao giờ có bộ nhớ đệm, mà đúng hơn là tác nhân người dùng phải luôn hỏi máy chủ nếu nó được sử dụng để lưu trữ nó. Ngược lại, không có cửa hàng cho biết thậm chí không giữ một bản sao, có nghĩa là không có gì để hỏi về. Nếu bạn biết câu trả lời cho "Tôi có thể sử dụng lại điều này không?" luôn luôn là không, bạn sẽ có được hiệu suất tăng lên bởi (1) bỏ qua chi phí yêu cầu và (2) không hủy bỏ một số kết quả được lưu trữ có thể tái sử dụng để nhường chỗ cho kết quả mới không bao giờ được tái sử dụng.

Ngoài hiệu suất, có sự khác biệt về hành vi với lịch sử trình duyệt. Phần thông số HTTP 1.1 13.13 nói rằng "thời gian hết hạn không áp dụng cho các cơ chế lịch sử". Tiêu đề no-cache mô tả hết hạn và do đó không áp dụng cho các cơ chế lịch sử như nút quay lại. Do đó, người dùng có thể điều hướng trở lại trang trước đó mà không có bộ nhớ cache mà không có máy chủ được liên lạc.

Mặt khác không lưu trữ, ngăn không cho dữ liệu được lưu trữ bên ngoài một phiên, trong trường hợp đó, nó không có sẵn cho một cơ chế lịch sử để sử dụng. Không có cửa hàng, nếu người dùng kết thúc phiên của mình bằng cách điều hướng đến một tên miền khác và sau đó quay trở lại, cách duy nhất để trình duyệt biết nội dung hiển thị là lấy lại trang ban đầu từ máy chủ.

Dưới đây là làm thế nào một Chromium issue về chủ đề này làm cho sự phân biệt:

no-cache không có nghĩa là "không bộ nhớ cache này" (có nghĩa sẽ không có cửa hàng). không có bộ nhớ cache có nghĩa là không sử dụng này cho tải bình thường, trừ khi tài nguyên được xác nhận lại cho sự tươi mát. Điều hướng lịch sử không phải là tải bình thường.

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