Meta标签中的http-equiv用来标记不可缓存或过期时间,但效果一般。而且代理缓存基本不访问HTML文档内容,所以尽量少用meta标签控制缓存。

Pragma: no-cache

Forces caches to submit the request to the origin server for validation before releasing a cached copy.

Pragma is not specified for HTTP responses .Use[a1]  Pragma only for backwards compatibility with HTTP/1.0 clients.

Cache-Control

used to specify directives for caching mechanisms in both, requests and responses. Caching directives are unidirectional(单向), meaning that a given directive in a request is not implying that the same directive is to be given in the response.

通用指令

Cache-Control: max-age=<seconds>

Specifies the maximum amount of time a resource will be considered fresh. Contrary to Expires, this directive is relative to the time of the request.

Cache-Control: no-cache(数据会被缓存)

Forces caches to submit the request to the origin server for validation before releasing a cached copy.

Cache-Control: no-store

The cache should not store anything about the client request or server response.

Cache-Control: no-transform

Cache-Control: max-age=<seconds>

request指令

Cache-Control: max-stale[=<seconds>]

Cache-Control: min-fresh=<seconds>

Cache-Control: only-if-cached

response指令

Cache-Control: must-revalidate

The cache must verify the status of the stale resources before using it and expired ones should not be used.

Cache-Control: public

Cache-Control: private

Cache-Control: proxy-revalidate

Cache-Control: s-maxage=<seconds>

Expires: <http-date>

The Expires header contains the date/time after which the response is considered stale.

Invalid dates, like the value 0, represent a date in the past and mean that the resource is already expired.

If there is a Cache-Control header with the "max-age" or "s-max-age" directive in the response, the Expires header is ignored.


[a1]请求缓存和响应缓存有什么不同???

带条件请求和无条件请求

An unconditional request is made when the client browser does not have a cached copy of the resource available locally. In this case, the server is expected to return the resource with a HTTP/200 OK response. If the response’s headers permit it, the client may cache this response in order to reuse it later.
If the browser later needs a resource which is in the cache, but that response is expired (older than its max-age or past the Expires date), then the client will make a conditional request to the server to determine whether the previously cached response is still valid and should be reused. The conditional request contains an If-Modified-Since and/or If-None-Match header that indicates to the server what version of the content the browser already has in its cache. The server can indicate that the client’s copy is still fresh by returning HTTP/304 Not Modified headers with no body, or it can indicate that the client’s copy is stale by returning a HTTP/200 OK response with the new version of the resource.
In the first case (Normal-Refresh,F5), we will perform HTTP requests (conditional, if possible) to revalidate all of the resources on the page, regardless of freshness.In the second case (Super-Refresh,Ctrl+F5,强制刷新), we perform unconditional HTTP requests to redownload all of the content on the page, bypassing the cache altogether.

区分响应是来自原始服务器还是代理服务器?

The Date general-header field represents the date and time at which the message(报文) was originated.
The Age header contains the time in seconds the object has been in a proxy cache. If it is Age: 0, it was probably just fetched from the origin server; otherwise It is usually calculated as a difference between the proxy's current date and the Date general header included in the HTTP response.

200 OK (from cache) vs 304 Not Modified

200 OK (from cache)  是浏览器没有跟服务器确认,直接用了浏览器缓存,最快。一般在expires/max-age头部有效时不会发送请求。因为请求根本没有产生,所以在chrome下请求头部会显示:Provisional headers are shown
304 Not Modified 是浏览器和服务器确认了一次缓存的有效性,再使用缓存,多一次确认(If-Modified-Since/etag)请求。

为什么有"Last-Modified"时也会有200 OK from cache
不同的浏览器会根据不同的用户行为(刷新/强制刷新)对请求添加不同的头部,对响应采用不同的缓存策略。
When "Expires" and "Cache-Control" headers are not specified, but a "Last-Modified" header is specified, browsers have to guess at how long they should keep the document in cache. Some browsers do use algorithms that let the page remain in cache for a day or more.

200 OK (from cache)原因的更多相关文章

  1. [web] 200 OK (from cache) 与 304 Not Modified

    为什么有的缓存是 200 OK (from cache),有的缓存是 304 Not Modified 呢?很简单,看运维是否移除了 Entity Tag.移除了,就总是 200 OK (from c ...

  2. [转]200 OK (from cache) 与 304 Not Modified------没有这个规则(ETag是否移除)!!!from cache和304,请查看顶部的流程图!

    //========没有这个规则(ETag是否移除) 20160422============// 200 OK (from cache) 与 304 Not Modified 为什么有的缓存是 20 ...

  3. [HTTP Protocol] 200 OK (from cache)和304 Not Modified

    含义 200 OK (from cache)直接从缓存中获取的内容并未请求服务器 304 Not Modified 请求服务器并和服务器比较 If-Modified-Since,若文件未改变,服务器返 ...

  4. 200 OK (from cache) 与 304 Not Modified

    解释: 200 OK (from cache)  是浏览器没有跟服务器确认,直接用了浏览器缓存: 304 Not Modified 是浏览器和服务器多确认了一次缓存有效性,再用的缓存. 触发区别: 2 ...

  5. 200 from memory cache / from disk cache / 304 Not Modified 区别

    三者情况有什么区别和联系,什么情况下会发生200 from memory cache 或 200 from disk cache 或 304 Not Modified? 200 from memory ...

  6. 200 ok 几种状态

    浏览器加载资源成功一般会有几种状态 200 ok   ----  从原始服务器请求成功 200 ok from cache    ---- 200 ok from disk cache  ---- 2 ...

  7. 【Android】Android import和export使用说明 及 export报错:jarlist.cache: Resource is out of sync with the file syst解决

    在Android开发export项目时发现有时会报错,内容如下: Problems were encountered during export:  Error exporting PalmIdent ...

  8. 浏览器缓存(Web Cache/ Http Cache)

    浏览器缓存(Web Cache/ Http Cache)是前端性能优化中很重要的组成部分. 缓存策略 浏览器的缓存策略是: 1.如果本地没有缓存,则发送非条件性请求. 2.如果本地有缓存,则判断本地缓 ...

  9. form memory cache、form disk cache与304

    200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存.此时的数据时缓存到内存中的,当kill进程后,数据将不存在200 from disk cache 不访问服务器, ...

随机推荐

  1. Python之路-基本数据类型

    一.数据类型 1.数字 包含整型和浮点型,还有复数2.字符 长度,索引,切片也适用于列表的操作 移除空白 strip() 默认字符串前后的空格,制表符,换行符 strip(";") ...

  2. Python之路-awk文本处理

    作业一:整理博客,内容包含awk.变量.运算符.if多分支 一.awk 1.awk是一个优秀的文本处理工具,多用来处理含有特殊分隔符的内容 常见用法 awk -F:  {print $1,$4} 作业 ...

  3. 老李分享:adb发送的指令都有哪些

    老李分享:adb发送的指令都有哪些   这两天在poptest上课的时候,我们邀请了业内技术牛人为我们的学员讲解手机自动化方面的知识,每天大家都很踊跃,要学习到晚上11点多才能,有的学员跟我说都累傻了 ...

  4. Java并发编程:如何创建进程?

    转载自:http://www.cnblogs.com/dolphin0520/p/3913517.html 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程 ...

  5. Windows下Nginx的安装与使用(一):配置端口转发

    什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过: localhost:8001 //图书 lo ...

  6. Android 接入 OpenCV库的三种方式

           OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...

  7. 在程序加载过程中显示ProgressDialog 对话框

    private ProgressDialog mProgressDlg = null; @Override protected void onCreate(Bundle savedInstanceSt ...

  8. Activity的Task详解

    1.Task Task是一个具有栈结构(后进先出)的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个Task,来放置根Activity.默认情况下,一个Activity启动另 ...

  9. DataTables源码分析(一)

    DataTables源码分析 写在前面 作为一名常年奋战在java世界中的程序猿,当我接触到现在所谓的前端技术时,内心其实是崩溃的.因为,前端的技术给我的第一个感觉就是"乱",这里 ...

  10. node.js 中模块的循环调用问题详解

    首先,我们看一下图示代码,每一个注释其实代表一个 js 文件.所以下面其实是三个 js 文件 .第一个是我们要运行的 main 文件,后面两个是 a, b 文件.   从上面可以看书 a ,b 两个模 ...