MS-缓存-Web缓存

此篇简单介绍web浏览器缓存的过程(304)

  1. 浏览器第一次访问Url,向服务器发送请求报头(HTTP Request Header),服务器响应同时记录相关属性标记(HTTP Response Header),其中状态码为200。

     HTTP/1.1 200 OK
     Date: Mon, 14 Jan 2019 06:04:10 GMT    
     Content-Type: image/jpeg        # 响应类型为image/jpeg
     Content-Length: 83185             # 响应大小为83185
     Cache-Control: max-age=3600  # 从请求时间开始到过期时间之间的秒数
     Expires: Mon, 14 Jan 2019 07:04:10 GMT  # 缓存过期时间
     Etag: "5d8c72a5edda8d6a:3239"  # 服务器生成的唯一标志符
    
  2. 浏览器第二次请求此url时,向服务器发送请求报头,服务器响应请求,但是发现标记文件没有发生改动,于是服务器返回304。
    浏览器收到此状态码之后,直接从浏览器缓存中读取。

     HTTP/1.x 304 Not Modified
     Date: Mon, 14 Jan 2019 05:03:56 GMT
     Content-Type: image/jpeg
     Content-Length: 83185
     Last-Modified: Sun, 13 Jan 2019 08:01:04 GMT
     Cache-Control:max-age=3600
     Expires: Thu, 02 Apr 2019 05:14:08 GMT
     Etag:"5d8c72a5edda8d6a:3239"
    

    字段解读:

    • Expires
      Expires(过期时间)是控制缓存的基本手段,告诉缓存器,副本在什么时间范围是新鲜的,过了这个时间,缓存器应该向服务器发送请求,检查文档是否发生修改。

      Expires对静态资源特别有效,可以在Nginx等web服务器设置很长的过期时间(这个时间必须是格林威治时间GMT,中国处于东八区,时间为GMT+8)

    • Cache Control
      通过这个属性可以让内容发布者全面控制内容,定位过期时间的限制。
      Cache Control的值可以为:

      • max-age=[秒]: 缓存过期时间,是基于请求时间的相对间隔,单位为秒
      • public:标记认证的内容也可以被缓存。一般上需要认证才能访问的内容,默认是不缓存的。
      • no-cache:强制每次请求都直接发送到源服务器,不经过本地缓存。
      • no-store:强制任何情况下都不留下缓存副本。
      • must-revalidate:声明请求的资源,如果在过期时间之内,且声明了资源的修改时间或者ETag之类的标志,是否应当向服务器确认资源是否是最新的。如果使用了这个属性,则每次都必须向服务器确认。
      • last-modified:文档最后修改时间
        浏览器第一次请求时,服务器在响应头返回这个字段 last-modified: Sun, 13 Jan 2019 08:01:04 GMT,标明文档上次修改时间。
        第二次请求时,请求头加上 if-modified-since: Sun, 13 Jan 2019 08:01:04 GMT,服务器可以根据这个时间判断文档是否在这个时间之后发生变更。
    • ETag
      简单说就是,服务器响应时给请求的url标记,并在HTTP响应头中将其发送给客户端,例如etag: W/"3189a0471d72d02f2c1d8edc023afed0"
      服务端再次请求时,在请求头加上 if-none-match: W/"3189a0471d72d02f2c1d8edc023afed0"
      如果etag没有发生变化,服务器直接返回304

你可能感兴趣的:(MS-缓存-Web缓存)