我正在使用静态内容插件维护Restify服务器。尽管事先发生了任何事情,该插件仍会强加Cache-Control
标题。始终包含max-age
,默认为3600。
Cache-Control: public, max-age=3600
我需要为max-age
以外的所有内容设置大index.html
。
server.pre((req, res, next) => {
const path = url.parse(req.url);
if (path.pathname === '/' && req.accepts('text/html')) {
req.url = '/public/index.html';
// Encourage the client to always download index.html.
res.header('Expires', '0');
res.header('Cache-Control',
'no-store, no-cache, must-revalidate, max-age=0');
}
next();
});
问题是静态服务器强制添加Cache-Control
会导致服务器发送相互矛盾的max-age
值。
Cache-Control:no-store, no-cache, must-revalidate, max-age=0
Cache-Control:public, max-age=315360000
我尝试了一些不起作用的东西,但这是一个问题吗?我不知道浏览器是否会通过下载index.html
新鲜(这是我想要的)来解决矛盾
答案 0 :(得分:0)
我相信max-age = 0只是告诉缓存(和用户代理)响应从一开始就过时,所以他们应该在使用缓存之前重新验证响应(例如,使用If-Not-Modified标头)复制,而no-cache告诉他们在使用缓存副本之前必须重新验证。 From 14.9.1 What is Cacheable [...]
为简洁起见,此引文略微偏离了上下文,但规范的语言使public static double ReadInput()
{
double number = 0;
while (true)
{
AssertIsDouble(Console.ReadLine());
}
}
private static double AssertIsDouble(string input)
{
double number = 0.0;
if (Double.TryParse(input, out number) && number > 0)
{
return number;
}
else
{
Console.WriteLine("Please, input a number greater than zero (0).");
}
}
成为比max-age
,no-cache
等更“弱”的指令。实际行为仍然存在浏览器中的实现细节,但如果must-revalidate
出现在强烈指示浏览器重新验证或不缓存的指令附近,那么期望浏览器符合({{ 3}})。