http cache-control 指令的设置以及意义

2023-05-16

转载地址 :    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control

    http://www.cnblogs.com/yuyii/archive/2008/10/16/1312238.html

        http://www.cnblogs.com/jsonzheng/p/3782215.html

    http://httpd.apache.org/docs/current/mod/mod_expires.html


几篇很精彩的文章

实例:


通过HTTP的META设置expires和cache-control
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content="Mon, 20 Jul 2009 23:00:00 GMT" />
上述设置仅为举例,实际使用其一即可。这样写的话仅对该网页有效,对网页中的图片或其他请求无效,并不会做任何cache。
这样客户端的请求就多了,尽管只是检查Last-modified状态的东西,但是请求一多对浏览速度必定有影响。  

如果要对文件添加cache可以通过apache的mod_expire模块,写法为
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 days"  

</IfModule>
记得ExpiresActive设为On,我起先没设置On,似乎怎样YSlow都查不到缓存机制。这样添加的话就是默认所有的。  

如果要针对个别MIME类型则可以:
ExpiresByType image/gif "access plus 5 hours 3 minutes"
见 Apache Module mod_expires
另外,当点击浏览器上的刷新,客户端发送的请求中均是max-age=0,表示validate操作,发送请求到服务器
要求检查cache,再更新cache,一般得到的是304 Not Modified,表示没变动。  


语法

Edit

指令不区分大小写,并且具有可选参数,可以用令牌或者带引号的字符串语法。多个指令以逗号分隔。

缓存请求指令

客户端可以在HTTP请求中使用的标准 Cache-Control 指令。


Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-control: no-cache 
Cache-control: no-store
Cache-control: no-transform
Cache-control: only-if-cached
  

缓存响应指令

服务器可以在响应中使用的标准 Cache-Control 指令。


Cache-control: must-revalidate
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>
  

 拓展Cache-Control指令

拓展缓存指令不是HTTP缓存标准的一部分,使用前请注意检查 兼容性!


Cache-control: immutable 
Cache-control: stale-while-revalidate=<seconds>
Cache-control: stale-if-error=<seconds>  



常见的指令:

Edit

可缓存性

public
表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。
private
表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。
no-cache
 强制所有缓存了该响应的缓存用户,在使用已存储的缓存数据前,发送带验证器的请求到原始服务器
only-if-cached
表明如果缓存存在,只使用缓存,无论原始服务器数据是否有更新。

到期

max-age=<seconds>
设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。
s-maxage=<seconds>
覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略。
max-stale[=<seconds>]
表明客户端愿意接收一个已经过期的资源。 可选的设置一个时间(单位秒),表示响应不能超过的过时时间。
min-fresh=<seconds>
表示客户端希望在指定的时间内获取最新的响应。
stale-while-revalidate=<seconds> 
...
stale-if-error=<seconds> 
...

重新验证和重新加载

must-revalidate
缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源。
proxy-revalidate
与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。
immutable 
表示响应正文不会随时间而改变。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match或If-Modified-Since)来检查更新,即使用户显式地刷新页面。在Firefox中,immutable只能被用在  https:// transactions. 有关更多信息,请参阅 这里.

其他

no-store
缓存不应存储有关客户端请求或服务器响应的任何内容。
no-transform
不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。

示例Edit

禁止缓存

发送如下指令可以关闭缓存。此外,可以参考Expires 和 Pragma 标题。

Cache-Control: no-cache, no-store, must-revalidate

缓存静态资源

对于应用程序中不会改变的文件,你通常可以在发送响应头前添加积极缓存。这包括例如由应用程序提供的静态文件,例如图像,CSS文件和JavaScript文件。另请参阅Expires标题。

Cache-Control:public, max-age=31536000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http cache-control 指令的设置以及意义 的相关文章

  • 两个http请求可以合并在一起吗?如果可以的话,nodeJS服务器如何处理呢?

    昨天我做了一些关于 NodeJS 的演讲 有人问我以下问题 我们知道nodeJS是一个单线程服务器 多个请求是 到达服务器并将所有请求推送到事件循环 如果什么 两个请求同时到达服务器 服务器将如何处理 处理这种情况 我猜到了一个想法并回复如
  • AngularJS $http 错误时 http 状态错误

    我正在尝试使用 AngularJS 的 http 服务构建 JSONP 请求 并且在出现错误时 我收到错误的 http 状态代码 404 而不是 500 并且页面正文也丢失了 所以这是场景 我调用的 URL 返回 500 内部服务器错误 并
  • 脚本和链接标签的简写 http:// 为 // ?有人以前看过/用过这个吗?

    问题如下 如果您使用 addthis 共享按钮 查看任何网站 一旦您浮动在 addthis 按钮上 并且加载了所有必需的资源 请使用 firebug 或 chrome 检查器查看文档的正文 不是源代码 而是屏幕上的实际文档 对象检查器 你会
  • 如何使用 Apache HttpClient 4 获取文件上传的进度条?

    我有以下用于使用 Apache 的 HTTP Client org apache http client 上传文件的代码 public static void main String args throws Exception String
  • 把自己限制在HTTP1.0有什么用吗?

    我负责构建一些工具来帮助最终用户测试为什么他们的浏览器可能无法与网站配合使用 我被告知它可能不起作用的原因之一是 需要 HTTP1 1 这一行 我浏览了大多数浏览器选项 只浏览了 IE 版本 6 及更高版本 even 9 允许您禁用 HTT
  • HTTP-DELETE-请求是否允许响应主体?

    我假设响应代码 200 始终允许响应主体 但我找不到任何明确提及删除请求的响应主体 这里明确提到了RFC http www w3 org Protocols rfc2616 rfc2616 sec9 html sec9 7 简短的回答是 Y
  • C# - 如何进行 HTTP 调用

    我想对网站进行 HTTP 调用 我只需要点击 URL 不想上传或下载任何数据 最简单 最快的方法是什么 我尝试了下面的代码 但它很慢 并且在第二次重复请求后 它只是超时 59 秒 然后恢复 WebRequest webRequest Web
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • 使用 Google OAuth2.0 时出现错误请求

    从 Salesforce 中使用 Google OAuth 时 我收到 400 错误请求 以下错误与无效的 grant type 有关 但如果您查看 使用刷新令牌 下的文档 您会发现它是正确的 https developers google
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not
  • 除了 GET 和 POST 之外,如何从浏览器向 RESTful 应用程序发送任何内容?

    我没有得到 RESTful 的东西 是的 我知道如何从浏览器向我的应用程序发送 GET 请求 这是通过 URL 链接 a href user someone 并且还可以通过form方法发送POST请求 a
  • 在 Go 中跟踪 HTTP 请求时指定超时

    我知道通过执行以下操作来指定 HTTP 请求超时的常用方法 httpClient http Client Timeout time Duration 5 time Second 但是 我似乎不知道在跟踪 HTTP 请求时如何执行相同的操作
  • 如何确定服务器是否支持 Range 标头?

    我一直在尝试使用 Range 标头值从特定点流式传输音频 但我总是从一开始就得到歌曲 我正在通过程序执行此操作 因此不确定问题是否出在我的代码中或服务器上 如何确定服务器是否支持 Range 标头参数 Thanks 方式HTTP规范 htt
  • 我应该使用多个 HttpClient 来进行批量异步 GET 请求吗?

    我有一个场景 我需要在尽可能短的时间内发出大量 GET 请求 想想大约 1000 个 我知道通常最好保留一个客户端并尽可能重用它 Create Single HTTP Client HttpClient client new HttpCli
  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P
  • 在读取正文之前拒绝 HTTP 请求

    我正在开发一个网站 用户需要上传一些非常大的文件 该网站是用 PHP 编写的 在某些情况下 我想根据标头拒绝文件 理想情况下 我想在收到标头后立即拒绝请求 而不读取正文 如果标头足以表明该文件应被拒绝 则没有理由读取 200M 的文件 此外
  • python 2.7 中的 HTTP 2 请求

    在 python 中向 HTTP 1 和 HTTP 2 发出请求有什么区别吗 我可以像这样在 python 中进行 HTTP 1 x 调用 url http someURL values param1 key param2 key2 dat
  • AJAX 发送数据到 Node.js 服务器

    我尝试使用 AJAX 将数据发送到 Node js 服务器 但不断遇到同样的问题 即接收问题 这是客户端 JavaScript AJAX 代码 var objects function return new XMLHttpRequest f
  • 如何转义角度 HttpParams?

    在 Angular 服务中 我使用 HttpParams 将字符串发送到服务 get phone string Observable

随机推荐

  • 使用python把普通图片生成ico图标

    文章目录 xff1a 1 使用在线网站生成ico图标2 使用python的库包PythonMagick生成ico图片2 1 安装PythonMagick2 2 使用PythonMagick生成ico图片代码 1 ico是Iconfile的缩
  • windows上比较好用的截图软件+Gif录制软件+看图软件,建议收藏!

    文章目录 xff1a 1 windows10上比较好用的截图软件1 1 windows10自带的截图方式1 1 1 快捷键win 43 shift 43 s1 1 2 PrintScreen键截图1 1 3 win 43 PrintScre
  • 在Edge浏览器中登录微软账户报错:0x80190001错误

    1 错误可能原因 之所以会出现登录微软账户报错 xff0c 很有可能是因为Clash xff08 你懂得 xff09 2 解决方式 1 下载一个finder xff08 抓包软件 xff09 xff08 参考 xff09 finder官网下
  • 加入bing体验chatGPT大军中来吧,它来了!

    1 第一步 xff1a 加入候选名单 1 首先需要加入候选名单 https www microsoft com zh cn edge form 61 MA13FJ 2 下载最新的Edge浏览器 androd iOS都有试用版本 xff08
  • Qt6 CMake项目导入资源文件Resources 官方最简洁方法

    导入 xff1a https doc qt io qt 6 resources html build system integration 使用 xff1a source 34 qrc images close2x png 34
  • HTTP 系列(三)—— HTTP报文

    什么是 HTTP 报文 HTTP 报文是简单的格式化数据块 xff0c 通俗的说 xff0c 它是用于数据传输的文本字符串 每条报文都包含一条来自客户端的请求或者一条来自服务器的响应 xff0c 它们都由三个部分组成 xff1a 对报文进行
  • GET请求

    什么是GET请求 get请求其实就是通过URL来传递数据 一个标准的URL网址 xff0c 在最后有一个querystring部分 xff0c 表示对页面查询 xff0c 用 来表示这部分 xff0c 内容必须是k 61 v 对个参数用 a
  • nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result

    文章目录 背景解决 背景 mybaitsPlus this baseMapper selectOne wrapper 查出多个结果 xff0c 抛出了异常 解决 getOne wrapper false ServiceImpl getOne
  • RARP的使用

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是RARP的使用 主机只知道自己的硬件地址时 xff0c 可以通过RARP Reverse Address Resolution Pro
  • 5 . 如何用c语言封装寄存器

    前面我们介绍了存储器映射 寄存器和寄存器映射 xff0c 这些都是为使用 C语言封装寄存器做铺垫 我们通过一个实例来对 C 语言封装寄存器进行介绍 实例 xff1a 控制 GPIOC 端口的第 0 管脚输出一个低电平 首先我们需要知道GPI
  • 干货收藏:68道C语言与C++常见面试题

    1 变量的声明和定义有什么区别 变量的定义为变量分配地址和存储空间 变量的声明不分配地址 一个变量可以在多个地方声明 但是只在一个地方定义 加入extern 修饰的是变量的声明 说明此变量将在文件以外或在文件后面部分定义 神级编程网站 堪称
  • 推荐几款好用的手机编程APP!

    各位 很多人现在喜欢用手机写代码 今天小编就带大家盘点几款手机端编程软件 程序员相关的海量资料 点击免费获取 1 C4droid 适用编程语言 C C 适用平台 Android 2 2 软件介绍 付费软件 国内免费 c4droid是款And
  • 精心为学弟学妹整理了60个适合练手的C语言/C++项目,值得收藏!

    前几天写这篇文章 精心为学弟学妹准备的C语言与C 学习路线 书籍 视频推荐和资料 值得收藏 阅读和收藏都挺多 也让我一周涨了3000多粉丝 在这里感谢大家关注支持我 最近很多粉丝朋友私信问一些学习路线的问题以及一些学习资源 一个一个回复有点
  • 如果编程语言是一门武功绝学

    nbsp 学习编程与武功绝学 武侠小说中 各路侠客绿林好汉都是从基本功开始一招一式学起 掌握了足够多的招式后 加之勤学苦练 量变引起质变 会有一天打开任督二脉顿悟出这些招式背后的哲学逻辑 成为一代宗师 在编程的学习过程中 我们何尝不是从一招
  • CSDN粉丝冲3万粉福利放送!C++、Python、数据结构与算法、计算机基础、数据库教程汇总!

    最近有粉丝问我要一些C Python 数据结构与算法 计算机基础 数据库的学习资料 一个一个回复有些慢 索性就写一篇文章吧 声明 此文章中涉及到的内容均来自网络 我看到比较好的才分享给大家 你们可以根据情况选择 程序员必备资源 值得收藏 点
  • C/C++框架和第三方库汇总

    根据读者反馈 xff0c 发现此篇汇总获赞率异常的高 xff0c 为了照顾一下新加入的粉丝 xff0c 故重新发一遍 xff0c 供粉丝查阅温习 值得学习的C语言开源项目 1 Webbench Webbench是一个在linux下使用的非常
  • C/C++动态检测内存错误利器 - ASan

    来自公众号 xff1a 大胖聊编程 作者 xff1a 大胖 ASan xff0c 即Address Sanitizer xff0c 是一个适用于c c 43 43 程序的动态内存错误检测器 xff0c 它由一个编译器检测模块 xff08 L
  • C++之虚函数和虚函数表

    哈喽大家好 最近开始学习计算机基础相关的面试内容 xff0c 比如C 43 43 算法与数据结构 计算机网络 操作系统 设计模式 数据库等 因此把学习时记的笔记分享给大家 xff0c 希望对大家有所帮助 今天分享的是C 43 43 中虚函数
  • 计算机大一新生,想卷却找不到方向,恳请前辈指指路?

    其实 xff0c 大学里面的课程就告诉你应该学什么 xff1f 先推荐三个非常不错的计算机科学学习的 Github 仓库 xff01 希望对大家有帮助 xff01 哭了哭了 xff01 如果我当时上大学的时候有人告诉我这些开源项目就好了 x
  • http cache-control 指令的设置以及意义

    转载地址 https developer mozilla org zh CN docs Web HTTP Headers Cache Control http www cnblogs com yuyii archive 2008 10 16