首页 > http缓存

http缓存

请教一下,在HTTP协议的缓存机制当中。
假如浏览器端有一个文件的缓存,再次向服务器发出该资源的请求时会携带上if-modified-since和if-none-match两个字段。
而服务器会根据文件的last-modified和ETag进行对比。假如说ETag相同,文件最后修改时间也没有改变,那么服务器会返回一个304告诉浏览器继续用本地缓存就可以了。

那么想请教一个问题,为什么这里需要两个字段呢?单独的时间比较(last-modified)或者是文件哈希值(ETag)不行吗?为什么一定要两个?


在http中Last-Modified 与If-Modified-Since都是用于记录页面最后修改时间的 HTTP 头信息.

注意:

在这Last-Modified 是由服务器往客户端发送的HTTP头,另一个If-Modified-Since是由客户端往服务器发送的头,可以看到,再次请求本地存在的cache页面时,客户端会通过If-Modified-Since头将先前服务器端发过来的 Last-Modified最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,这时不用进到业务逻辑里,如果不是最新的,则返回新的内容,如果是最新的,则返回304告诉客户端其本地cache的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。而且在一些ajax应用中,要求获取的数据永远是最新的,而不是读取位于缓存中的数据,做这样的设置是非常有必要的。如果只有ETag值的话服务器每次都需要从db里读取数据然后计算ETag值做对比,如果一样就返回304,这样做只能减少网络流量,服务器压力还是有的。

刚才看到的,希望对你有点帮助!


好吧,大概翻译一下 http://stackoverflow.com/ques...
1.如果你请求的资源是如文件等容易得出Last-Modified属性的资源,那么用if-modified-since是非常方便的
2.但是像需要从数据库里获取资源的情况计算出Last-Modified是不容易的,这种情况使用ETag是比较方便的

【热门文章】
【热门文章】