zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    有关同时包含<winsock2.h>与<windows.h>头文件的问题
    如何使用微软提供的TCHAR.H头文件?
    下面的程序在VC6通过,在VS2008不能,错误信息都是“不能将参数……从const char[]转换为LPCWSTR”
    Android开发学习日志(四)
    爬虫开发(一)
    java集合源码详解
    Paxos算法
    linux 常用命令
    Bitmap的原理和应用
    Flink Checkpoint 问题排查实用指南
  • 原文地址:https://www.cnblogs.com/weibiao/p/6273748.html
Copyright © 2011-2022 走看看