• nginx缓存原理


    一、HTTP字段理解

    1.Expires:

        该字段的http1.0时的规范,值为一个绝对时间的GMT格式的时间字符串,代表缓存资源的过期时间,在这个时点之前即命中缓存。

        缺点:服务器返回的时间,可能与客户有时间差,时间差太大时可能会千万缓存混乱。

    2.Cache-Control:

        该字段为http1.1时的规范,Cache-Control:max-age=3600为1小时。工作原理和expires一样,两个字段同时使用时,以cache-control为准。

    3.协商缓存:

        继续保持上文,当cache-control没有命中,chrome会向服务器发送请求,服务器会验证协商缓存是否命中,如果协商缓存命中,请求返回http304 Not Modified.

        协商缓存利用Last-Modified,If-Modified-Since和ETag,if-None-Match这两对头部来管理。

        3.1.Last-Modified and If-Modified-Since

            last-modified:为服务器的response字段。

            if-modified-sine:为请求头部字段。

            通过比较两个时间来判断资源在两次请求期间是否有过修改,如果没有修改,则命中协商缓存,在chrome从缓存中获得资源,如果有修改过则服务器返回资源,同时返回新的last-modified.

        3.2.ETag and if-None-Match

            a.有些情况判断日期是不够的。修改信息不重要,last-modified不能精确到秒。

            b.ETag:为服务器字段。if-None-Match:为请求头部字段。

                第一请求chrome缓存数据和头部Etag,第二次请求时,request会带上if-none-match为上次的etag值。命中则用缓存,否则返回新资源和ETAG。

        注意:4个值一般同时启用,增加可靠性。分布式系统多台服务器的文件last-modified保持一致。分布式系统尽量关闭Etag,每台机器生成的Etag会不一样。

    http://www.open-open.com/doc/view/e16e9c855ed4471594db279a07ad181e

  • 相关阅读:
    虚函数
    class与struct的区别
    HTTP是什么连接
    长连接与短连接
    多线程的主要优点
    overload、override、overwrite的介绍
    常用的Linux命令
    IO模型——IO多路复用机制
    栈区与堆区的区别
    软链接和硬链接到底有啥区别
  • 原文地址:https://www.cnblogs.com/weibiao/p/6273748.html
Copyright © 2020-2023  润新知