当再次访问网站时,上次访问留存有expire和etag,last-modified,浏览器是如何处理的?
expire在有效期内,是否还发出http请求?
如果不发出http请求了,服务器资源更新了,还是从浏览器缓存取了旧资源吗?
如果还发http请求,那由etag和last-modified来判断资源是否更新,好像expire的意义不明。
就是概括说一下浏览器的判断处理和服务器的交互流程,谢谢
当再次访问网站时,上次访问留存有expire和etag,last-modified,浏览器是如何处理的?
expire在有效期内,是否还发出http请求?
如果不发出http请求了,服务器资源更新了,还是从浏览器缓存取了旧资源吗?
如果还发http请求,那由etag和last-modified来判断资源是否更新,好像expire的意义不明。
就是概括说一下浏览器的判断处理和服务器的交互流程,谢谢
8 回答4k 阅读✓ 已解决
6 回答2.1k 阅读✓ 已解决
5 回答5.8k 阅读✓ 已解决
6 回答1.7k 阅读
3 回答2.1k 阅读
8 回答3.3k 阅读
3 回答2.2k 阅读✓ 已解决
Expires
已经没啥用了,更多的是为了兼容旧浏览器(只支持 HTTP/1.0 的上古时代浏览器)的响应标头。从 HTTP/1.1 以后就有了
Cache-Control
标头中的max-age
,与上者几乎等效,也就是设值有所不同,前者是设一个具体的时间点、后者是设一个秒数。但显然Expires
可能因为客户端与服务端时间不一致、或网络延迟导致过期时间不准确,并且Cache-Control
能设的值更多也就更灵活。如果两者同时存在,以
Cache-Control
为准。如果同时设了
ETag
和Last-Modified
,那么必须同时满足条件才会 304,不存在谁更优先就使用谁一说。但一般分布式环境下(比如 CDN)很少使用
ETag
,因为ETag
依赖 Web Server 的哈希算法,不同 Web Server、不同版本、不同的配置,都会导致同样的文件ETag
可能是不相等的。当然了,如果你能限制上述信息都一样,也可以使用ETag
,并不绝对。顺序的话是先判断
Cache-Control
/Expires
,再ETag
,最后Last-Modified
,都满足就 304,有一项不满足就 200。