Tại sao trình duyệt không tôn trọng tiêu đề bộ đệm cho yêu cầu trang ban đầu?


8

Tôi đang gãi đầu một chút về điều này. Trang web Drupal tôi chạy đang thiết lập các tiêu đề bộ đệm phù hợp sẽ chỉ ra rằng trang có thể được lưu trong bộ nhớ cache trong 15 phút. Tuy nhiên, mỗi lần tôi nhấn trang, nó luôn gửi yêu cầu GET thay vì tải trang từ bộ đệm.

Tôi không mạnh mẽ làm mới trang mỗi lần, điều mà tôi cho là sẽ chỉ ra cho trình duyệt tôi muốn xóa bộ nhớ cache. Tôi không kích hoạt chế độ bộ đệm cache cho nhà phát triển.

Đây chỉ là hành vi mặc định của trình duyệt, hay tôi thiếu một cái gì đó rõ ràng? Đây là tiêu đề yêu cầu / phản hồi đánh vào trang chủ của tôi từ các công cụ dev của FireFox:

LƯU Ý / EDIT : Một số người cho rằng điều này có liên quan đến Expirestiêu đề trong quá khứ. Tuy nhiên, Cache-Controlghi đè bất cứ điều gì Expires, như được mô tả trong RFC 2616 , Sec 14.9.3. Drupal bao gồm điều này để vô hiệu hóa bộ đệm ẩn trên các máy khách HTTP 1.0 cũ hơn, không hỗ trợ Varytiêu đề nâng cao hơn mà Drupal cần cho bộ nhớ đệm phù hợp.

nhập mô tả hình ảnh ở đây

Câu trả lời:


11

Bạn có tiêu đề Vary: Cookie, Chấp nhận mã hóa trong phản hồi. Điều đó có nghĩa là nếu proxy (bao gồm cả trình duyệt của bạn) muốn lưu trữ trang này thì nên chuẩn bị để lưu phiên bản mới cho mọi vlaue cookie có thể sửa đổi (hoặc thay đổi trong mã hóa chấp nhận). Đặc biệt, nó sẽ phải giữ một bản ghi ở vị trí đầu tiên của cookie khi chúng được gửi trong yêu cầu như một tiêu chí phân biệt. Tôi có thể tưởng tượng rằng trình duyệt sẽ từ chối điều này nếu cookie quá lớn (và do đó không thể lặp lại) hoặc nó từ chối để tôi tránh thông tin cookie bị rò rỉ qua nội dung bộ đệm hoặc đơn giản là nội dung cookie bị thay đổi trên mỗi gọi.


4
Là CHỈ sắp trả lời câu hỏi của riêng tôi khi tôi đi đến kết luận này. Tôi có cookie Google Analytics, một trong số đó thay đổi theo từng yêu cầu trang, ngăn trang bị lưu vào bộ nhớ cache.
Brian

2

Trong các chương trình CMS, một số trang yêu cầu tương tác với cơ sở dữ liệu để hiển thị nội dung động cụ thể theo yêu cầu của người dùng. Toàn bộ trang không thể được lưu trong bộ nhớ cache hoặc nó sẽ không hiển thị nội dung chính xác cho người dùng.

Một ví dụ về điều này trong thực tế là một trang thanh toán / giỏ hàng thương mại điện tử. Vì trang trông khác nhau mỗi khi không có cách nào để lưu trữ đầy đủ. Nếu không biết thêm về trang cụ thể, thật khó để biết liệu trang bạn đang tham chiếu có yêu cầu sự tham gia của cơ sở dữ liệu hay không.


Mặc dù điều đó là đúng, nhưng điều đó không đúng với cơ chế lưu trữ trang của Drupal (nó thực sự lưu trữ toàn bộ đầu ra HTML và cung cấp cho lưu lượng truy cập "ẩn danh") và không thực sự liên quan đến câu hỏi của tôi. Câu hỏi của tôi là về cách các trình duyệt dường như phản ứng không chính xác với các tiêu đề bộ đệm trang thích hợp được đặt (xem hình ảnh).
Brian

Tôi đã thấy điều này trước khi gỡ lỗi, nhưng không thể nhớ, có lý do hợp lệ nào mà tiêu đề phản hồi của bạn hiển thị Hết hạn: Tháng 11 năm 1978 không? Hoặc đó có thể là câu trả lời của bạn.
JMC

1
Trong mã của Drupal, nhận xét ở trên tiêu đề đó có nội dung: "Proxy HTTP / 1.0 không hỗ trợ tiêu đề Vary, vì vậy hãy ngăn chặn mọi bộ đệm bằng cách gửi ngày hết hạn trong quá khứ. Máy khách HTTP / 1.1 bỏ qua tiêu đề Hết hạn nếu Kiểm soát bộ đệm: max-age = directive được chỉ định (xem RFC 2616, phần 14.9.3). " Ngày cụ thể là người tạo ra sinh nhật của Drupal.
Brian

Điều kỳ lạ là Hết hạn không khớp, ví dụ: Được sửa đổi lần cuối cộng với tuổi tối đa
Hagen von Eitzen

-1

Ngoài các câu trả lời khác, Expirestiêu đề là trong quá khứ, đó cũng là một lý do khiến trình duyệt không lưu trữ trang.


Điều này không đúng khi có Cache-Controltiêu đề. Nó ghi đè Expirestiêu đề cho các máy khách HTTP 1.1. Xem ietf.org/rfc/rfc2616.txt , phần 14.9.3.
Brian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.