我正在使用nginx 的expires
指令;它的etag
指令以及Last-Modified
标题(如果我理解正确的话)默认情况下处于打开状态。
为了在使用限制性内容安全策略(CSP)标头(即无'unsafe-inline'
资源策略)时允许特定的内联 JavaScript,我想使用随机数。
我基本上遵循了Scott Helme 关于此事的文章,在我的试验中使用 nginx$request_id
来创建nonce
ServerFault 上讨论的内容(以便快速尝试,而不必从头开始构建 nginx)。
然而,当我尝试此操作时,缓存似乎不再按我的预期工作:
Nginx 每次都以文件、新鲜Last-Modified
和ETag
标头进行响应,而不是304 Not Modified
我希望的响应。
仔细想想,这是有道理的:nonce
CSP 标头以及源代码中的 都会随着每个请求而变化。然而,其他一切都没有改变。因此,可以说,这是“弱验证器”应该忽略的更改(从而将请求的资源标记为未更改)。
话虽如此,我对服务器配置或缓存标头知之甚少,甚至一无所知。很可能我所掌握的少量知识没有帮助,而且弱验证器无论如何也不应该以这种方式工作。
此外,似乎存在一个问题,即当浏览器拥有旧文件的缓存版本nonce
但获得304 Not Modified
新文件的标头时,浏览器会感到困惑nonce
(尽管我自己在试用中没有看到这一点)。
因此,我的问题基本上是:是否可以配置nginx,以便缓存以某种方式工作,当nginx创建和标头(即它只看起来的地方)时,对唯一的更改(即通过文本替换动态发生的更改)nonce
被忽略Last-Modified
ETag
在磁盘上的文件更改时) - 有效地使用什么可能是弱验证器?
并且,假设浏览器混乱是一个问题,您是否可以采取一些措施来阻止它,例如当服务器返回 304 时不返回 CSP …