我看到对网络服务器的一些调用的以下响应:
初始调用:
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
.
如果服务器被指示不缓存早期响应,那么服务器期望页面从哪里提供数据?
有趣的是,我do查看浏览器中提供的响应,因此浏览器似乎已经缓存了响应,尽管有 no-cache 指令。为什么?
A 回应Cache-Control: no-cache https://www.rfc-editor.org/rfc/rfc2616#section-14.9.1并不意味着响应根本不能存储在客户端,而是意味着:
如果 no-cache 指令未指定字段名称,则
缓存不得使用响应来满足后续请求
没有成功地与源服务器重新验证。这
允许源服务器阻止缓存,甚至可以通过以下方式进行缓存:
已配置为返回对客户端请求的过时响应。
因此,客户端可以将响应存储在本地缓存中,但需要由源服务器重新验证响应。如果服务器表明存储在客户端缓存中的响应仍然有效(即 304 响应),则允许客户端使用存储的响应来满足请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)