我希望实现基于ETag
的cache-control
,我想知道ETags
在浏览器中存储了多长时间,以及它们是否可以保留比当前 session 更长的时间。
我已设置服务器并正确发送ETags
以获取响应,并且正在使用jQuery.ajax
从浏览器发送请求。
系统正常工作,如果Not-Modified
header (先前的ETag
)与服务器上生成的ETag
相匹配,则以适当的304响应进行响应。这对于当前 session 来说一切正常,但是当我关闭浏览器并重新打开它时,jQuery不再发送Not-Modified
header 。
我想知道是否可以使用任何方法来触发默认浏览器行为,并发送Not-Modified
header 进行响应(如果适用),而无需来手动在ajax请求中设置 header 或将ETag
存储在localStorage
/indexedDb
中。
最佳答案
一个Etag必须伴随其他标签,这些标签告诉浏览器将内容保留多长时间
https://developers.google.com/speed/docs/best-practices/caching?csw=1#LeverageBrowserCaching
为所有可缓存资源指定Expires或Cache-Control max-age之一,以及Last-Modified或ETag之一,这一点很重要。同时指定Expires和Cache-Control:max-age或同时指定Last-Modified和ETag是多余的。
因此,这完全取决于您使用Expires或max-age标签指定的持续时间,即浏览器将其保留多长时间
etag的唯一用途是使浏览器可以在初始到期时间之后发出“如果已修改”请求,以查看内容是否实际上已更改或获取未修改的304。
管理不善的304可能导致其他问题,例如不必要和多余的304请求:http://calendar.perfplanet.com/2010/easy-cache-headers/