0%

2019-02-18-http2.0、https(2)

头部的区别

从 http1.0 到 http1.1,改进了很多头部

  • http1.0 的缓存控制:
    • Pragma:严格来说,它不属于专门的缓存控制头,但是它设置了「no-cache」可以让本地强缓存失效(相当于一个配置项)
    • Expires:服务器配置,属于强缓存,用来控制在规定的时间之前,浏览器不会发出请求,而是直接使用本地缓存,注意,Expires 一般对应服务器端时间,如 Expires:Fri,30 Oct 2001 12:22:12
    • If-Modifien-Since/Last-Modifed:这个、两个是成对出现的,属于协商缓存的内容,其中浏览器的头部是「If-Modified-Since」,而服务端的是「Last-Modified」,他的作用是,在发起请求时,如果「If-Modified-Since」和「Last-Modified」匹配, 那么代表服务器资源并未改变,因此服务器不会返回资源实体,而是只返回头部,通知浏览器可以使用本地缓存。「Last-Modified」-> 文件最后修改的时间,只能精确到 1s
  • http1.1 的缓存控制:
    • Cache-Control:缓存控制头部,有 no-cache、max-age 等多种取值。
    • Max-Age: 服务器配置的,用来控制强缓存,在规定的时间之内,浏览器无需发送请求,直接使用本地缓存,注意「Max-Age」是「Cache-Control」的值,不是独立的头部,例如「Cache-Control:max-age=3600」,而且它的值是绝对时间,由服务器计算
    • If-None-Match/E-tag:这两个是成对出现的,属于协商缓存的内容,其实浏览器头部的是「If-None-Match」,而服务端的是「E-tag」,同样,发出请求后, 如果「If-None-Match」和「E-tag」匹配,则代表内容未变,通知浏览器使用本地缓存,和「Last-Modified」不同,「E-tag」更精确,它是类似于指纹一样的东西,基于「FileEtag INode Mtime Size」生成的,也是只要文件变,指纹就会变,而且没有任何精度限制

Max-Age 与 Expires 的区别

「Expires」使用的是服务器端的本地时间,但是有时客户端时间好服务器端时间不同步,导致了浏览器本地的缓存失效或者过期

所以不推荐 Expires,而且 Max-Age 使用的是客户端本地时间计算,所以不会有这个问题,所以推荐使用 Max-Age

PS:同时启动了 Cache-Control 与 Expires,Cache-Contrl 优先级更高。

E-tag 和 Last-Modified 的区别

  • Last-Modified:
    • 表明服务器端的文件时最后何时改变的
    • 缺点:只能精确到 1s
    • 服务端的文件会周期性改变,导致缓存失效
  • E-tag:
    • 是一种种指纹机制,可以代表文件的相关唯一性
    • 只有文件改变,缓存才会变
    • 没有精确时间的限定

图解

image

结语

第一步,HTTP 请求终于讲完了,其实我之前对整个请求体系基本不知道多少。明天开始我会开始整理(抄)解析页面流程,敬请期待!