9-缓存验证Last-Modified和Etag的使用

2018-07-13  本文已影响0人  谷子多

资源验证

如果catche-Ctrol设置了no-cache(任何节点都不可以缓存。可以在本地服务器缓存,每次发起请求都需要去服务器验证,如果服务器说可以使用缓存,才能使用缓存。也就是说需要经过服务器验证的。)

设置了Catche-Ctrol的请求过程如下:

屏幕快照 2018-07-13 上午1.30.48.png

数据如何验证?

1、验证头

if (request.url === '/script.js') {
    response.writeHead(200, {
      'Content-Type': 'text/javascript',
      // 设置到期时间 , 每次发起请求都需要去服务器验证
      'Cache-Control': 'max-age=20000000000,no-cache',
      //Last-Modified
      'Last-Modified' : '123',
      // Etag
      'Etag' : 777
    })
A8F61FED-5EA4-48F9-910A-CB265B35A309.png 4CD9A88D-EA45-4ACC-ADD9-9CE815E6DE6B.png

这个时候依旧返回了内容,因为内容并没有修改,所以不需要服务器返回response,做法如下:对比Etag

// 如果两次结果相同,返回缓存结果为空
     const etag = request.headers['if-none-match']
     if(etag === '777'){
         response.writeHead(304, {
             'Content-Type': 'text/javascript',
             'Cache-Control': 'max-age=20000000000,no-cache',
             'Last-Modified' : '123',
             'Etag' : 777
         })
         // 设置请求结果为空
         response.end('')
     }else{
         response.writeHead(200, {
             'Content-Type': 'text/javascript',
             'Cache-Control': 'max-age=20000000000,no-cache',
             'Last-Modified' : '123',
             'Etag' : 777
         })
         // 否则就是内容修改了,返回最新结果
         response.end('console.log("script loaded twice")')
     }
9C8E1CA3-F7E6-4358-8988-2146E60FC26E.png
上一篇 下一篇

猜你喜欢

热点阅读