Các cache-control
tiêu đề là cơ chế chính cho một máy chủ HTTP để kể một bộ nhớ đệm proxy "tươi mát" của một phản ứng. (tức là, làm thế nào / nếu bao lâu để lưu phản hồi trong bộ nhớ cache)
Trong một số tình huống, cache-control
chỉ thị là không đủ. Một cuộc thảo luận từ nhóm làm việc HTTP được lưu trữ tại đây, mô tả một trang chỉ thay đổi theo ngôn ngữ. Đây không phải là trường hợp sử dụng chính xác cho tiêu đề khác nhau, nhưng ngữ cảnh rất có giá trị cho cuộc thảo luận của chúng ta. (Mặc dù tôi tin rằng tiêu đề Vary sẽ giải quyết được vấn đề trong trường hợp đó, nhưng có một Cách Tốt hơn.) Từ trang đó:
Vary
chỉ dành cho những trường hợp vô vọng hoặc quá phức tạp để proxy có thể sao chép những gì máy chủ sẽ làm.
Một ví dụ tiếp theo:
Máy chủ HTTP của bạn có một trang đích lớn. Bạn có hai trang hơi khác nhau với cùng một URL, tùy thuộc vào việc người dùng đã ở đó trước đó hay chưa. Bạn phân biệt giữa các yêu cầu và "số lượt truy cập" của người dùng dựa trên Cookie. Nhưng - vì trang đích của máy chủ của bạn quá lớn, bạn muốn các proxy trung gian lưu vào bộ nhớ cache phản hồi nếu có thể.
Các tiêu đề URL, Last-Modified và Cache-Control không đủ để cung cấp thông tin chi tiết này cho proxy bộ nhớ đệm, nhưng nếu bạn thêm Vary: Cookie
, công cụ bộ nhớ cache sẽ thêm tiêu đề Cookie vào các quyết định lưu vào bộ nhớ đệm của nó.
Cuối cùng, đối với lưu lượng truy cập nhỏ, các trang web động - tôi luôn thấy đơn giản Cache-Control: no-cache, no-store
và Pragma: no-cache
đủ.
Chỉnh sửa - để trả lời chính xác hơn câu hỏi của bạn: tiêu đề yêu cầu HTTP 'Chấp nhận' xác định các Loại Nội dung mà khách hàng có thể xử lý. Nếu bạn có hai bản sao của cùng một nội dung tại cùng một URL, chỉ khác nhau về Loại Nội dung, thì việc sử dụng Vary: Accept
có thể phù hợp.
Cập nhật 11 tháng 9 12:
Tôi bao gồm một số liên kết đã xuất hiện trong các bình luận kể từ khi bình luận này được đăng ban đầu. Cả hai đều là nguồn tài nguyên tuyệt vời cho các ví dụ (và các vấn đề) trong thế giới thực với Vary: Accept; Nếu bạn đang đọc câu trả lời này, bạn cũng cần đọc các liên kết đó.
Đầu tiên, từ EricLaw nổi bật, về hành vi của Internet Explorer với tiêu đề Vary và một số thách thức mà nó đặt ra cho các nhà phát triển: Tiêu đề Vary ngăn chặn bộ đệm trong IE . Tóm lại, IE (trước IE9) không lưu vào bộ đệm bất kỳ nội dung nào sử dụng tiêu đề Vary vì bộ đệm yêu cầu không bao gồm các tiêu đề Yêu cầu HTTP. EricLaw (Eric Lawrence trong thế giới thực) là Giám đốc chương trình của nhóm IE.
Thứ hai là từ Eran Medan và là một cuộc thảo luận đang diễn ra về hành vi không mong muốn liên quan đến Vary trong Chrome: Sao lưu không xử lý chính xác tiêu đề Vary . Nó liên quan đến hành vi của IE, ngoại trừ các nhà phát triển Chrome đã thực hiện một cách tiếp cận khác - mặc dù nó có vẻ không phải là một lựa chọn có chủ ý.