Etag
HTTP响应头是资源的特定版本的标识符。
这可以让缓存更高效,并节省带宽.
因为如果内容没有改变,Web服务器不需要发送完整的响应。
而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。
如果给定URL中的资源更改,则一定要生成新的Etag值。 因此Etags类似于指纹,也可能被某些服务器用于跟踪。 比较etags能快速确定此资源是否变化,但也可能被跟踪服务器永久存留。
语法:
ETag: "<etag_value>"
特点:
直接不下载,但是要请求,因为文件没有变化就不请求
- 没有固定生成etag值的方法,我这里采用md5编码。实现如下:
- 现在项目文件夹中安装md5
yarn add md5
- server.js中
var md5 = require ('md5')//先声明全局变量md5
在path==='./js/main.js'
的判断中
let string = fs.readFileSync('main.js') // 获取main.js的内容
let fileMd5 = md5(string) //获取main.js文件的md5编码
response.setHeader(‘Etag’,fileMd5) //将编码返回给客户端
设置完成后在main.js
文件的响应头会有一个
Etag: 019efc821a50bd2908408d85ed467d07,
下一次请求中,main.js
的请求头会有一个if-None-Match
就会带上Etag的数值,后端对比原始编码和下载后的编码,一致时,表示文件下载完整,没有被篡改。
网友评论