2013-08-23 43 views
1

我希望执行ETag根据cache-control,我想知道多长时间ETags存储在浏览器中,如果他们可以保持更长的时间比当前会话。浏览器如何存储Etags?

我有服务器设置和发送ETags为正确的答复,我发送请求从jQuery.ajax浏览器。

该系统正常工作,与适当的304响应响应如果Not-Modified报头(以前ETag)匹配服务器上的生成ETag。这一切都适用于当前会话,但是当我关闭浏览器并重新打开它时,Not-Modified标头不再由jQuery发送。

我想知道是否有任何方法,我可以用它来触发默认的浏览器的行为,并发送了响应Not-Modified头(如适用),没有手动设置在Ajax请求的头或存储在ETaglocalStorage/indexedDb

+0

如果会话关闭后不能正常发送的'etag',也许你不发送expires'头右侧'。 –

+0

您是否清除窗口关闭处的缓存? 'ETag'与文件一起存储在缓存中。所以如果浏览器清除缓存中的元素,那么'ETag'也会丢失。但是,如果文件仍在缓存中,浏览器会发送带有请求的“ETag”,告诉服务器在缓存中已经有一个带有“ETag”的文件。 –

回答

0

一个ETag必须由其他标记,告诉浏览器如何长时间保持内容

https://developers.google.com/speed/docs/best-practices/caching?csw=1#LeverageBrowserCaching

指定的一个很重要的过期或缓存控制最大年龄,和一个陪同对于所有可缓存资源,最后修改或ETag。指定Expires和Cache-Control:max-age或指定Last-Modified和ETag都是多余的。

因此,一切都取决于你用过期或指定的时间上,浏览器将坚持多久其

的eTag的唯一目的是使浏览器可以将“如果发出最大年龄标签修改“请求,以查看内容是否已经实际改变或取回304未被修改。

管理不善304的可能会导致其他问题,如重复,多余304个请求:http://calendar.perfplanet.com/2010/easy-cache-headers/

+0

感谢您的资源,派上用场验证我是否正确设置标题。事实证明,我的问题是由于Chrome没有在'https'连接上缓存具有自签名证书的文件引起的。 – Eliendrae