缓存协商:Last-Modified 与 ETag

本文介绍了浏览器与服务器间缓存协商的两种方式:Last-Modified 和 ETag 的工作原理及应用场景。Last-Modified 依赖文件最后修改时间,而 ETag 依据文件内容生成唯一标识符。ETag 更能有效避免不必要的服务器响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

究竟要不要使用浏览器的本地缓存,服务器和浏览器之间有一个沟通的机制,叫做缓存协商,一种是Last-modified,一种就是Etag。

Last-Modified 
浏览器发出一个请求,对于一般的静态内容,服务器端都会通过文件进行stat()系统调用,获取该文件的最后修改时间,然后放入了HTTP的响应头的信息。下一次浏览器再次发送请求的时候,就会在HTTP请求头上面加上一个 (If-Modified-SinceFri, 25 Mar 2011 07:55:33 GMT )这样的标记,服务器再次接受到这个请求的时候,就会将文件的Last-modified时间和HTTP请求的时间的进行对于,如果木有发生变化,返回状态为304 Not Modified的响应。 

 

ETag

另一种协商方法,就是使用Etag,与Last-Modified非常相近,它不是用文件的修改时间进行对比的,而是根据文件的内容进行生成一个标志串,一般都是使用文件的内容的md5值。比如,apache为一个静态的文件响应头上面加入了Etag的标志。下一次浏览器进行请求的时候,HTTP请求就会附加一个If-None-Match的标记,来询问文件是否被修改过,这时候服务器重新计算这个文件的Etag的值,如果相同的话,则直接允许浏览器使用本地缓存。不同的话,则直接返回最新的内容给浏览器。

 

 

两种的对比

有些特定的场合下,一些静态的文件,可能会被频繁的更新, 但是文件内容没有变化,这时候如果使用Last-modified,服务器端始终返回最新的内容给浏览器,而Etag是根据文件内容来的,如果内容没有变化的话,始终会让浏览器使用本地缓存的文件。所以,使使用ETag可以更好的避免一些不必要的服务器相应。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值