转自:https://www.cnblogs.com/sfnz/p/5383647.html

HTTP协议的Cache-Control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。

浏览器中关于Cache的3属性:

Cache-Control:

设置相对过期时间, max-age指明以秒为单位的缓存时间. 若对静态资源只缓存一次, 可以设置max-age的值为315360000000 (一万年).

Http协议的cache-control的常见取值及其组合释义:

no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.

no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源)

private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.

public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等

max-age: 相对过期时间, 即以秒为单位的缓存时间.

no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.

private, 正数的max-age: 后退时候不会访问服务器

no-cache, 正数的max-age: 后退时会访问服务器

点击刷新: 无论如何都会访问服务器.

Expires:

设置以分钟为单位的绝对过期时间, 优先级比Cache-Control低, 同时设置Expires和Cache-Control则后者生效.

Last-Modified:

该资源的最后修改时间, 在浏览器下一次请求资源时, 浏览器将先发送一个请求到服务器上, 并附上If-Unmodified-Since头来说明浏览器所缓存资源的最后修改时间, 如果服务器发现没有修改, 则直接返回304(Not Modified)回应信息给浏览器(内容很少), 如果服务器对比时间发现修改了, 则照常返回所请求的资源.

注意:

Last-Modified属性通常和Expires或Cache-Control属性配合使用, 因为即使浏览器设置缓存, 当用户点击”刷新”按钮时, 浏览器会忽略缓存继续向服务器发送请求, 这时Last-Modified将能够很好的减小回应开销.

ETag将返回给浏览器一个资源ID, 如果有了新版本则正常发送并附上新ID, 否则返回304, 但是在服务器集群情况下, 每个服务器将返回不同的ID, 因此不建议使用ETag.

以上描述的客户端浏览器缓存是指存储位置在客户端浏览器, 但是对客户端浏览器缓存的实际设置工作是在服务器上的资源中完成的. 虽然刚才我们介绍了有关于客户端浏览器缓存的属性, 但是实际上对这些属性的设置工作都需要在服务器的资源中做设置. 我们有两种操作手段对浏览器缓存进行设置, 一个是通过页面指令声明来设置, 另外一个是通过编程方式来设置.

Nginx的ngx_http_headers_module模块可以对Cache-Control头相关的东西进行配置
例如:
    # 相关页面设置Cache-Control头信息
    例一:
   if ($request_uri ~* "^/$|^/search/.+/|^/company/.+/") {
     add_header    Cache-Control  max-age=3600;
    }

例二:

location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;
} 例三:
location ~ .*\.(js|css)$ {
expires 10d;
}

最新文章

  1. [Spring] AOP, Aspect实例解析
  2. 【IOS】异步调用--- 简单使用记录
  3. PowerShell 常用命令
  4. winform-全局异常捕获作用
  5. python 十进制 十六进制
  6. [转]oracle 11g 忘记 默认用户密码
  7. 转:全志A20 GPIO 总结文档
  8. ASP.NET listBbox控件用法
  9. 第九十九节,JavaScript数据类型
  10. app每个页面都有一个相同的浮层控件 实现思路
  11. pageRank算法 python实现
  12. 数据挖掘之聚类算法Apriori总结
  13. oracle 定时 job
  14. CSS三栏布局
  15. java中的数据加密1 消息摘要
  16. android studio jni调用入门
  17. iOS自定义全屏返回与tableView左划删除手势冲突解决
  18. 生产环境 tidb部署实践
  19. 变量与指针 --- WalMart 寄存箱设计者不懂计算机
  20. mac中yeoman构建你的项目

热门文章

  1. 几个高逼格 Linux 命令!
  2. WebService 接收JSON字符串
  3. Implement Dependent Reference Properties实现依赖引用属性 (EF)
  4. 记一次asp.net core 在iis上运行抛出502.5错误
  5. 细数C++中的for循环
  6. 从《华为的冬天》到AI的冬天 | 甲子光年
  7. 【转载】Gradle for Android 第六篇( 测试)
  8. swift个人总结
  9. 用linux编译并运行c文件
  10. 实时SSH网络吞吐量测试