zoukankan      html  css  js  c++  java
  • http请求头缓存实现

    转自CSDN ouyang-web之路

    原文链接:https://blog.csdn.net/cangqiong_xiamen/article/details/90405555

    一.浏览器的缓存

    status 为 200

    Size为 from cache

    200 from cache: 直接从本地缓存中获取响应,最快速,最省流量, 因为根本没有向服务器发送请求
    304 Not Modified:协商缓存,浏览器在本地没有生命中的情况下请求头中发送一定的效验数据到服务端,如果服务端数据没有改变浏览器从本地缓存响应,返回304
    快速,发送的数据很少,只返回一些基本的响应头信息,数据量很小,不发送实际响应体
    浏览器向服务器缓存是否更新了,是否还能继续用
    200 OK: 以上两种缓存全都失败,服务器返回完整响应。没有用到缓存,相对最慢。
    浏览器认为本地缓存可以使用,是不会去请求服务端的

    二.获取请求头
    Curl -I 参数I为只获取请求头信息
    [root@localhost ~]# curl -I www.baidu.com
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: Keep-Alive
    Content-Length: 277
    Content-Type: text/html
    Date: Mon, 20 May 2019 05:28:13 GMT
    Etag: “575e1f72-115”
    Last-Modified: Mon, 13 Jun 2016 02:50:26 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18

    Cache-Control: 运用Cache-Control告知浏览器缓存过期的时间间隔而不是时刻,即使具体时间不一致,也不影响缓存的管理
    no-store 禁止浏览器缓存响应
    no-cache 不允许直接使用本地缓存,先发起请求和服务器协商
    max-age=delta-seconds: 告知浏览器该响应本地缓存有效的最长期限,以秒为单位
    Last-Modified: 通知浏览器资源的最后修改时间
    Last-Modified: Mon,28 Sep 2015 08:06:43 GMT
    Pragma: HTTP1.0时代的遗留产物,该字段被设置为no-cache时,会告知浏览器禁用本地缓存,即每次都向服务器发送请求
    ETag: HTTP1.1推出的,文件的指纹标识符,如果文件内容修改,指纹会改变
    Etag:“78437822c-6739”
    If-Modified-Since: 得到资源的最后修改时间后,会将这个信息通过If-Modified-Since提交到服务器做检查,如果没有修改,返回304状态码
    Connection:keep-alive 表示是否需要持久连接(HTTP 1.1默认进行持久连接) Keep-Alive表示持久连接

    三.使用请求头来处理浏览器缓存


    实现效果: 用户请求时浏览器缓存一个小时,一个小时后文件获取
    一个小时内文件,浏览器使用本地缓存

    <?php ini_set('date.timezone','Asia/Shanghai');
    //获取浏览器最后缓存修改的时间
    $since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : 0;
    $lifetime = 3600;
    //判断文件是否过期
    if ($since && (strtotime($since) + $lifetime > time()))
    {
       header('HTTP/1.1 304 Not Modified'); //使用本地缓存
       exit;
    }
    //告诉浏览器资源最新修改时间
    header('Last-Modified:'.gmdate('D, d M Y H:i:s',time()).'GMT');
    echo time();

  • 相关阅读:
    理解构造器
    if与switch的性能比较
    Java对象的内存(一)
    shell编程_条件判断if
    shell编程_基础&变量
    集群架构篇:Nginx架构演进<拆分数据库 多台web节点共享静态资源>
    集群架构篇:Nginx流行架构LNMP
    集群架构篇:Nginx常用模块
    LInux系统@安装CentOS7虚拟机
    docker pull越来越慢的解决方法
  • 原文地址:https://www.cnblogs.com/SallyShan/p/11458969.html
Copyright © 2011-2022 走看看