zoukankan      html  css  js  c++  java
  • HTTP缓存学习

    1. 缓存控制Catch-Control


    • max-age:缓存有效期
    • public:允许其他用户读取缓存(公共缓冲服务器)
    • private:只允许特定用户读取缓存(公共缓冲服务器)
    • no-catch:不走强缓存,每次都请求服务器验证缓存是否可用(协商)
    • no-store:不走缓存,每次直接请求数据

    2. 缓存过期判断机制


    • 根据Catch-Controls-maxagemax-age判断,以s-maxage为例,若当前时间>缓存生成时间+s-maxage则表示已经过期(s-maxagemax-age作用都是设置缓存储存最大周期,s-maxage适用于多用户的公共缓存服务器)
    • 根据Expire比较,Expire代表一个绝对过期时间,若当前时间>Expire,代表缓存已经过期
    注: HTTP/1.1之前Expire优先级高于s-maxagemax-age,之后则相反

    3. 协商缓存


    根据判断机制判断出缓存过期后,进行协商缓存

    • Etag:实体标记,服务器资源每次更改都会引起资源Etag值的变化
    • Last-Modified:最后更新时间,服务器资源最后更新的时间
    • if-None-Match:放在请求头用于判断服务器对应值是否与传入值相同
    • if-Modified-Since:用于告诉服务器字段值早期更新时间,若与服务端不一致,则会处理请求
      当客户端第一次请求资源时,服务器会将所请求资源的EtagLast-Modified放在响应头交给客户端

    Etag验证

    当客户端第二次请求资源时,会将Etag作为if-None-Match的字段值,用于验证资源是否改变,若if-None-Match与服务端Etag不一致,说明服务端资源已经更改,服务器接受请求,返回新资源,否则返回304(此时响应头还会有Etag,即使没有变化)

    Last-Modified验证

    当客户端第二次请求资源时,将Last-Modified作为if-Modified-Since的字段值,提交给服务端,服务器会对比服务器资源的Last-Modified与客户端传入的if-Modified-Since,如果不一致说明资源更改时间不一致,有更新,返回新资源,否则返回304(响应头不会添加Last-Modified

    EtagLast-Modified比较

    • Etag比对的是资源内容,可以检测到细微改变
    • Last-Modified比对的是资源文件修改时间,在内容未更改仅仅是修改时间更改的情况下也会引起重新发送数据,检查粒度是秒级,秒级以下的更改无法判断

    由此可以看出,Etag能够更加精准控制缓存,两者可以同时只有,服务器优先验证Etag

  • 相关阅读:
    简述at和crontab命令
    自建yum仓库,分别为网络源和本地源
    简述rpm与yum命令的常见选项
    用户目录权限管理.手动添加用户.截取用户信息
    总结描述用户和组管理类命令的使用方法,系统用户相关信息,取出主机IP地址
    Android独立交叉编译环境搭建
    Python编程总结之常用三方模块
    GDB常用命令简介
    linux内核中task_struct与thread_info及stack三者的关系
    在Linux-PC上建立kdump调试环境
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12990167.html
Copyright © 2011-2022 走看看