Etag

作者: 凉城十月 | 来源:发表于2020-09-18 01:56 被阅读0次

    Etag HTTP响应头是资源的特定版本的标识符。
    这可以让缓存更高效,并节省带宽.
    因为如果内容没有改变,Web服务器不需要发送完整的响应。
    而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。

    如果给定URL中的资源更改,则一定要生成新的Etag值。 因此Etags类似于指纹,也可能被某些服务器用于跟踪。 比较etags能快速确定此资源是否变化,但也可能被跟踪服务器永久存留。

    语法:

    ETag: "<etag_value>"

    特点:

    直接不下载,但是要请求,因为文件没有变化就不请求

    • 没有固定生成etag值的方法,我这里采用md5编码。实现如下:
    1. 现在项目文件夹中安装md5
      yarn add md5
    2. 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的数值,后端对比原始编码和下载后的编码,一致时,表示文件下载完整,没有被篡改。

    相关文章

      网友评论

          本文标题:Etag

          本文链接:https://www.haomeiwen.com/subject/lrzqyktx.html