美文网首页Nginx高端成长之路程序员Api设计
【充电】《Nginx核心知识100讲》浏览器缓存、nginx控制

【充电】《Nginx核心知识100讲》浏览器缓存、nginx控制

作者: 言十年 | 来源:发表于2019-01-20 12:43 被阅读59次

    极客专栏《Nginx核心知识100讲》97~98 小节,笔记
    注意:这个是看专栏视频,敲的哈。这个专栏让我收货蛮大的。

    97 | 用好浏览器的缓存

    在互联网中使用缓存是最有效的提升访问速度的方法。在web服务器场景中不仅要考虑nginx作为缓存服务时的使用方法,还要考虑浏览器缓存生效的场景。浏览器的缓存是否生效可以通过nginx的指令去控制。而浏览器的缓存对用户的体验提升也是最大的。

    浏览器缓存与nginx缓存

    image.png

    浏览器缓存

    image.png

    Last-Modified:比较简单,也就是我们访问的资源,比如我们使用了一个js文件,这个js文件的在服务器上上次被修改时间。

    image.png image.png image.png image.png

    浏览器请求发起,如果没有缓存就直接访问服务器了。如果有缓存并没有过期就从缓存中读取。如果缓存过期,先去判断Etag,如果有Etag就向nginx发送一个请求If-None-Match后面跟Etag的值。Etag的优先级是高于Last-Modified。这个时候服务器决定返回200还是304。如果返回给浏览器304,浏览器就直接从缓存中读取。如果是200就重新生成新的缓存替换原有的缓存。

    如果没有Etag的值就会使用Last-Modified(上次修改时间),有了上次修改时间,就把这个时间带到If-Modified-Since告诉nginx,nginx再来做决策,判断是返回304还是200。

    如果没有Etag也没有Last-Modified就会向服务器请求。

    演示

    浏览器访问https://www.taohui.pub/。禁止缓存,打开缓存,看看效果。

    image.png

    接下来看nginx怎么决策的,当它直接返回静态内容的时候,它可以根据浏览器发来的请求头部,决定是返回304还是200。

    98 | Nginx决策浏览器过期缓存是否有效

    本节介绍一个由headers模块提供的指令expires,这个指令用来告诉浏览器缓存究竟怎样过期。还会介绍not_modified模块,这个模块用来决策向浏览器返回304还是200,它的依据是http请求中的header和nginx中的一个指令If-Modified-Since

    expires指令

    image.png

    max:表示缓存永久有效。Expires表示绝对时间,为了表示绝对有效设置的是2037年最后一天。Cache-Control是通过另外一个维度,因为服务器的时间跟浏览器的时间很可能不一致,所以http后续又添加了一个头部Cache-Control,是一个相对时间。

    epoch:表示不使用这个缓存。能看到过期时间是1970年,cache-control为no-cache

    演示

    配置expires 为1h

    image.png image.png

    改成 -1h

    image.png

    设置具体的时间 expires @20h30m

    image.png

    not_modified模块

    image.png image.png

    if_modified_since:这个指令名字恰好与头部if_modified_since名字相同,要注意一下。

    image.png image.png image.png image.png

    演示

    先请求下首页。

    image.png

    图中5be62ca4-264。264表示264字节(访问的首页恰好是264字节),前面的是时间的十六进制表示格式。

    构造请求,然后修改If-None-Match。

    image.png

    修改了If-None-Match自然与Etag不等。所以返回200。

    留言问题

    1.老师,第二次访问的时候携带相同的etag的值,if none match变为false,所以就返回304了?

     作者回复
    是的

    相关文章

      网友评论

        本文标题:【充电】《Nginx核心知识100讲》浏览器缓存、nginx控制

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