zoukankan      html  css  js  c++  java
  • 浏览器缓存总结[转]

    浏览器缓存主要有两类
    缓存协商:Last-midified ,Etag
    彻底缓存:cache-control,Expires

    缓存协商的意思是需要去服务器端询问页面有没有修改过,没有修改过则返回304直接使用缓存内容,否则返回新内容
    协商步骤:

    • 服务器发送带Last-midified:GMTtime 头的http response

    • 浏览器下次请求时带上if-modified-since:GMTtime http 请求头

    • 服务端用本地Last-midified时间与if-modified-since比较,计算浏览器数据是否过期并发送响应


    last-midified示例:

    <?php
    $modified_time  = @$_SERVER['HTTP_IF_MODIFIED_SINCE'];
    if( strtotime($modified_time) + 3600>time() ){
        header('HTTP/1.1 304');
        exit;
    }
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    echo time();
    ?>



    Etag的工作原理与Last-midified类似,不同点在于Etag的值是用户可自定义的

    缓存协商可应用在动态页面且实时性不是特别强的页面,如网站首页

    彻底缓存
    彻底缓存的意思是在缓存失效之前不再需要跟服务器交互
    常用的是Expires,Expires的值是一个绝对时间,由服务器产生
    这儿存在一个问题,就是服务器的时间可能给客户端的时间不一致导致缓存时间的偏差
    要解决这个问题就要使用cache-control,它保存的是一个相对浏览器的时间
    如果同时存在cache-control和Expires怎么办呢?
    浏览器总是优先使用cache-control,如果没有cache-control才考虑Expires

    浏览器缓存最大的价值是节省了带宽
    为什么没有提高吞吐率呢? 下面来分析一下
    这里分两种情况:静态页面和动态页面
    服务端加载静态页面需要进行磁盘IO,浏览器缓存则可节省这部分时间,不过服务器一般会用squid等工具进行缓存,所以静态资源在提高吞吐率方面效果不明显
    再来看一看动态资源
    动态资源也分为两类:实时动态和准实时动态
    实时动态是不能用浏览器缓存的
    准实时动态页面可节省磁盘IO和计算时间,但是让浏览器缓存的时间不可太久,且在本地重复访问的概率也不大
    所以说动态内容在提高吞吐率方面效果也不明显
    对于准实时动态页面倒是可以缓存在服务端,如squid


  • 相关阅读:
    为Jupyter只安装目录的扩展包
    前端菜鸟的小程序摸索记录
    小计:Shopee批量删除修复~附脚本
    Python3 与 C# 并发编程之~ 协程篇
    记一次硬件故障,并普及点硬件知识
    小计:协同办公衍生出的需求
    监控MySQL|Redis|MongoDB的执行语句(go-sniffer)
    Linux IO实时监控iostat命令详解
    Linux下的磁盘缓存
    使用top命令查看系统状态
  • 原文地址:https://www.cnblogs.com/itfenqing/p/4429439.html
Copyright © 2011-2022 走看看