请求 Headers 与响应 Headers

Request Headers vs Response Headers

我正在尝试将图像缓存在网站上。图像由 PHP 提供,我在其中设置缓存控制的响应 header 具有适当的值,但这不是缓存图像,我认为它可能与请求有关 header 有 no-cache 的缓存控制? Headers 下面:

回应Headers

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

请求Headers

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

如何让这些图像缓存?

您关于由于 Cache-Control: no-cache 请求 header 而导致缓存不足的想法是正确的;该请求 header 告诉任何可能的缓存 将任何缓存数据用于请求的资源(参见 RFC 2616 的 "End-to-end reload" 部分) .

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

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

希望对您有所帮助!