我正在运行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副本。 此外,你可以添加一个age和max-age标题保持max-age高于age有时甚至避免304。
最后,如果您试图通过刷新查看页面上所有内容的效果,则由于浏览器发起的请求,您可能仍然会收到304个响应,这是您无法真正控制AFAIK的原因。