我希望实现基于ETagcache-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/

10-05 22:34
查看更多