请求标头与响应标头

Posted

技术标签:

【中文标题】请求标头与响应标头【英文标题】:Request Headers vs Response Headers 【发布时间】:2016-05-06 02:37:37 【问题描述】:

我正在尝试将图像缓存在网站上。图像由 php 提供,在其中我使用适当的值设置缓存控制的响应标头,但这不是缓存图像,我认为它可能与具有无缓存缓存控制的请求标头有关?以下标题:

响应标头

Access-Control-Allow-Origin:*
Cache-Control:max-age=290304000, public
Connection:close
Content-Encoding:gzip
Content-Length:5166
Content-Type:image/jpeg
Date:Thu, 28 Jan 2016 15:50:56 GMT
Etag:f31a1f9f6699e0660c6b0b8e2c133add
Expires:Sat, 27 Feb 2016 15:50:56 GMT
Last-Modified:Thu, 26 Nov 2015 11:40:11 GMT
Server:Apache/2.2.15 (Red Hat)
Vary:Accept-Encoding
X-Powered-By:PHP/5.6.17

请求标头

Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Authorization:Basic dGs6dGs=
Cache-Control:no-cache
Connection:keep-alive
Cookie:_dc_gtm_UA-60001243-5=1; _gat_UA-60001243-5=1; laravel_session=eyJpdiI6IkdcL0VYYUxMNEU0Q1wvM1VvQlpOU3NDZz09IiwidmFsdWUiOiJWaGVDaVJqdGdMaWlOaDBzUTI5Tzd3TmE1SU9UR2VcL29ZallVSWR6TUtaVTMyclM1aWpmM0F6Tk94eFBCZjZzamQ1U05RdlR0WTNUZzdFMEFLMkZYVFE9PSIsIm1hYyI6Ijg3MjY1ZDM3MDI1ZTRmYTI0ODY3NWYxNDEyM2RkMGRhMWFlY2E3NDFjOGEwMTQ1NzZiMWZmODFkNzZjNzRhYWQifQ%3D%3D; _ga=GA1.4.5501114.1453888035
Host:*****.com
Pragma:no-cache
Host:*****.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/47.0.2526.111 Safari/537.36

如何让这些图像缓存?

【问题讨论】:

【参考方案1】:

您关于由于Cache-Control: no-cache request 标头而导致缺少缓存的想法是正确的;该请求标头告诉所有可能的缓存为所请求的资源使用任何缓存数据(请参阅RFC 2616 的“端到端重新加载”部分)。

具体来说,您的响应可能实际上正在被缓存。但是 request 中的 Cache-Control: no-cache 标头表示该特定 HTTP 客户端不想利用缓存。另一个 HTTP 客户端可能能够使用缓存的资源。

对于类似的情况,一些 HTTP 客户端拒绝使用任何缓存,我已经看到 例如 haproxy 用于过滤/重写 Cache-Control 请求标头;我怀疑 Apache 也可以用来做同样的事情。从理论上讲,这种背着客户端重写请求头,可以说不是一个好主意。但是,如果您确实需要使用可用的缓存来请求此​​类请求,那么它可能是权宜之计。

希望这会有所帮助!

【讨论】:

以上是关于请求标头与响应标头的主要内容,如果未能解决你的问题,请参考以下文章

如何为一元 rpc 定义响应标头

RestSharp 打印原始请求和响应标头

Http-Server 如何创建请求标头和响应标头

如何将标头从请求传递到集成响应?

查看响应标头的工具[关闭]

我可以使用 tcpdump 获取 HTTP 请求、响应标头和响应正文吗?