使用nginx防止304未修改的请求

我正在运行nginx,并有以下块到期:

expires 52w; 

但是,当我使用Google Chrome浏览器开发工具观察networkingstream量时,一些资产从caching(200-从caching)加载,而大多数资产正在向服务器发出请求(304未修改)。

如果可能,我想从caching中加载所有资源,而不与服务器进行通信。 (200-从caching)

什么是我的nginxconfiguration所需的更改?

你正在寻找的是expires max; 这设置了一个遥远的标题,大多数浏览器将意味着甚至不打扰如果资源被修改。

请记住,你永远不能控制任何用户代理将会做什么请求,你只能给它指示,并希望它听。 这是关于你能做的最好的。

首先,304 HTTP状态不包含消息体,而不应该像规范中所描述的那样,还有一些基于高速cachingvalidation器的特定条件,请查看W3C文档了解更多细节。

关于在Nginx上启用caching设置,这是我设置caching的方式

 # all pages or URL patterns that are to be cached go here location ~* \.do$ { expires -1; } # allow caching for static assets location ~* \.(css|js|gif|jpe?g|png|svg)$ { expires 2w; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } 

你应该参考HTTP规范恕我直言; 并且完全理解caching背后的机制和304的含义,它不会像200响应那样传输相同的数据。

就像马丁指出的那样,你给出了一个“指令”,然后让浏览器检查是否使用caching副本。 此外,你可以添加一个agemax-age标题保持max-age高于age有时甚至避免304。

最后,如果您试图通过刷新查看页面上所有内容的效果,则由于浏览器发起的请求,您可能仍然会收到304个响应,这是您无法真正控制AFAIK的原因。