0

我正在尝试使静态文件在浏览器中缓存一小段时间(10 秒)。刷新页面时似乎工作正常。- 如果您是新用户,则为 200 - 如果您在前 10 秒内软刷新,则从缓存中提供 200 - 如果您在超过 10 秒后到达,则为 304。

每当我添加 Http 标头 'Vary': 'Accept-Encoding'它停止工作,这意味着浏览器缓存不再工作(我总是点击服务器)。发生这种情况是因为每当我添加 Http 标头“Vary”时, Http 请求都会停止发送 if-modified-since 或 if-none-match 。

缓存控制和变量兼容是否一起工作?

如果有人可以提出一些解决方案,我会留下 Http 请求和响应:

Request Header
accept:*/*
accept-encoding:gzip, deflate, sdch
accept-language:en-US,en;q=0.8
cache-control:max-age=0
cookie:XXXXX
referer:XXXXXXXXX
user-agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36


Response Header
cache-control:max-age=10
content-encoding:gzip
content-type:application/javascript
date:Wed, 13 Apr 2016 12:34:57 GMT
etag:W/"XXXXXXXXXXXXXX"
last-modified:Wed, 13 Apr 2016 12:34:25 GMT
server:nginx/1.9.14
status:200

vary:Accept-Encoding

x-powered-by:Express

Express我有这个配置来设置静态文件的响应头:

var setHeaders = function(res, path)
{
  res.setHeader('Cache-Control', 'max-age=10'); 
  res.vary('Accept-Encoding');
};

app.use('/static', express.static('./app/static', {setHeaders: setHeaders}));
4

1 回答 1

0

我有一个自我证书问题。似乎是它导致了这个问题。如果没有标头变化,即使没有安装证书,一切似乎也能正常工作。尽管如此,当使用可变标头时,缓存出现了问题。

安装自我证书使其工作。

解决方案来自:为什么浏览器不发送“If-None-Match”标头?

于 2016-04-14T07:08:07.830 回答