2011-08-15 33 views
45

Tôi đang sử dụng Amazon S3 để phân phát nội dung tĩnh cho trang web của mình. Tôi muốn trình duyệt lưu trữ các tài sản này càng lâu càng tốt. Tôi nên bao gồm các tiêu đề siêu dữ liệu nào với nội dung của mìnhGiá trị tối đa cho tiêu đề kiểm soát bộ nhớ cache trong HTTP

Cache-Control: max-age=??? 
+0

giá trị độ tuổi tối đa có thể phụ thuộc vào trình duyệt/phiên bản và bất kỳ proxy nào theo cách ... AFAIK không có tiêu chuẩn/thông số thực để bất kỳ giá trị nào sẽ là ... – Yahia

Trả lời

63

Thường một năm được khuyên là giá trị tối đa chuẩn. Xem RFC 2616:

Để đánh dấu một câu trả lời là "không bao giờ hết hạn", một máy chủ gốc sẽ gửi một Hết hạn ngày khoảng một năm kể từ thời gian phản ứng là gửi. Máy chủ HTTP/1.1 KHÔNG NÊN gửi ngày hết hạn sau hơn năm trong tương lai.

Mặc dù áp dụng cho tiêu chuẩn cũ hơn expires, cũng có ý nghĩa khi áp dụng cho cache-control khi không có bất kỳ hướng dẫn tiêu chuẩn rõ ràng nào. Đó là miễn là bạn thường cần anyway và chọn bất kỳ giá trị tùy ý lâu hơn có thể phá vỡ một số tác nhân người dùng. Vì vậy:

Cache-Control: max-age=31536000 
16

Xem xét không lưu trữ nội dung đó trong "càng lâu càng tốt" và thay vào đó hãy giải quyết miễn là hợp lý. Ví dụ, có thể bạn sẽ không cần phải cache nó lâu hơn 10 năm ... tôi có đúng không?

Các RFC thảo luận max-age đây: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

Eric Lawrence nói rằng trước khi IE9, trình duyệt Internet Explorer sẽ đối xử như cũ bất kỳ tài nguyên với một Cache-Control: giá trị max-age qua 2147483648 (2^31) giây, khoảng 68 năm (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx).

Các tác nhân người dùng khác tất nhiên sẽ khác nhau, vì vậy ... hãy thử và chọn một số không chắc (thay vì có khả năng!) Để gây tràn. Độ tuổi tối đa lớn hơn 31536000 (một năm) có ý nghĩa rất ít và không chính thức điều này được coi là giá trị tối đa hợp lý.

+0

Tôi thực sự đang tìm kiếm tiêu đề cụ thể để gửi. Tôi có một cơ chế được xây dựng vào trang web của mình để thay đổi url của tệp để trỏ đến một tên tệp khác nếu tôi cần thực hiện thay đổi và có khách truy cập xem nó. Tôi chỉ cần một ví dụ về các tiêu đề cụ thể để gửi để các trình duyệt lưu vào bộ nhớ cache các tài sản này vô thời hạn. –

+9

Bộ nhớ cache-Kiểm soát: tối đa tuổi = 31536000 sẽ lưu bộ nhớ cache trong 1 năm, là mức tối đa được đề xuất. – EricLaw

+2

@Geoffrey: Tôi nghĩ bạn đang bối rối về những gì Casey đang xây dựng. Anh ấy chỉ đơn giản nói rằng anh ta sẽ thay đổi URL mà anh ta tham chiếu trong đánh dấu của anh ấy khi phiên bản thay đổi. Đây là phương pháp hay nhất được sử dụng bởi hầu hết các trang web hàng đầu. – EricLaw

1

Những người tạo đề xuất lưu trong bộ nhớ cache tối đa 1 năm không nghĩ đúng cách.

Trước hết, nếu khách truy cập đang được phân phối tệp đã lưu trong bộ nhớ cache lỗi thời, thì tại sao nó cung cấp bất kỳ lợi ích nào để nó đột nhiên tải phiên bản mới sau 1 năm? Nếu một tệp có TTL 1 năm, từ một phối cảnh chức năng, điều đó rõ ràng có nghĩa là tệp không có ý định thay đổi.

Vậy tại sao một người cần nhiều hơn 1 năm?

1) Tại sao lại không? Nó không phục vụ bất kỳ mục đích nào để nói với trình duyệt của khách truy cập "hey, tệp này là 1 tuổi, có thể là một ý tưởng để kiểm tra xem nó đã được cập nhật chưa".

2) Dịch vụ CDN. Hầu hết các mạng phân phối nội dung sử dụng tiêu đề bộ nhớ cache để quyết định thời gian phân phát tệp hiệu quả từ máy chủ cạnh. Nếu bạn có kiểm soát bộ nhớ cache 1 năm cho tệp, nó sẽ bắt đầu yêu cầu lại các tệp không thay đổi từ máy chủ gốc và bộ đệm cạnh sẽ cần phải được điền lại hoàn toàn, gây tải chậm hơn cho ứng dụng khách và không cần thiết gọi đến nguồn gốc.

Điểm tối đa là 1 năm? Những trình duyệt nào sẽ bị sập trên một số tiền được đặt cao hơn 31536000?

+3

1 năm là sự vĩnh cửu trong thời đại internet. Thêm vào đó nếu bạn lưu trữ nghiêm túc bộ nhớ đệm, bạn sẽ xử lý (ngoài kiểm soát bộ nhớ cache) cơ chế sửa đổi lần cuối và/hoặc etag. Vì vậy, ngay cả những yêu cầu lại một năm sau đó sẽ không gây hại cho băng thông (304 không sửa đổi) – redben

+0

1 năm không phải là vĩnh cửu khi hình ảnh của bạn KHÔNG BAO GIỜ thay đổi (như hầu hết các hình ảnh trên internet), và khi bạn không muốn CDN để làm mới các tập tin từ nguồn gốc (mà sẽ là vô nghĩa). Đối với lần cuối cùng sửa đổi/etag, tất nhiên là khởi tạo một yêu cầu và hộp thoại giữa máy khách và máy chủ, chỉ để tìm hiểu những gì chúng ta đã biết "yup, nó vẫn ok để phục vụ các tập tin lưu trữ". Lập luận của bạn về cơ bản là "1 năm là vĩnh cửu trên internet", mà không phục vụ bất cứ điều gì hiệu quả. Tôi đã đặt 10 năm hết hạn trên hình ảnh, mà chỉ đơn giản là phục vụ một kết quả cuối cùng tốt hơn. – suncat100

+3

Ồ và cũng có kích thước bộ nhớ cache của trình duyệt mặc định. Mọi nội dung được lưu trong bộ nhớ cache có tồn tại một năm trong bộ nhớ cache của trình duyệt không? Tôi không biết. – redben

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