我从网络服务器的一些调用中看到以下响应:
初次通话:
HTTP/1.1 200 OK
Date: Mon, 16 Jan 2012 05:46:49 GMT
X-Powered-By: Servlet/2.5 JSP/2.1
Content-Type: text/plain
Content-Length: 78
Content-Encoding: gzip
Etag: "pv2052dae8634d971149a927231e3ceddf"
Cache-Control: no-cache
X-PvInfo: [S10202.C6191.A6057.RA6008.G182D.U3FAE8760].[OT/plaintext.OG/documents]
Vary: Accept-Encoding
Set-Cookie: JSESSIONID=l9pLPT5J1tpgK19Fq2qlT0F15ryByWDLgVLz16ffWPm4qQp6nzzx!-518520380; path=/; HttpOnly
DST=rd319o00000000000000000000ffffac16018bo8200; path=/
Connection: close
后续通话:
HTTP/1.1 304 Not Modified
Date: Mon, 16 Jan 2012 05:48:43 GMT
Connection: close
Etag: "pv2052dae8634d971149a927231e3ceddf"
Cache-Control: no-cache
Vary: Accept-Encoding
我不清楚的是,两个调用都会向浏览器返回Cache-Control: no-cache
指令。
但是,第二个调用也会返回304 Not Modified
。
服务器在哪里期望页面提供数据,因为它已被指示不缓存早期的响应?
有趣的是,我执行查看浏览器中提供的响应,因此尽管使用了no-cache指令,浏览器似乎已缓存了响应。为什么呢?
答案 0 :(得分:19)
response with Cache-Control: no-cache
并不意味着响应一定不能存储在客户端,而是意味着:
如果no-cache指令没有指定字段名,那么a 缓存绝不能使用响应来满足后续请求 没有使用原始服务器成功重新验证。这个 允许源服务器甚至通过缓存来阻止缓存 已配置为返回对客户端请求的陈旧响应。
因此允许客户端将响应存储在本地缓存中,但它需要由源服务器重新验证响应。如果服务器说存储在客户端缓存中的响应仍然有效(即304响应),则允许客户端使用存储的响应来满足请求。