我们尝试在反向代理不返回任何缓存标头的情况下强制执行一组非缓存标头,以便允许独立的后端开发人员随意设置标头,但会退回到安全选项。但是,我到目前为止的尝试都没有成功,所以我想问是否有其他人已经完成了这项工作,或者能看到我当前尝试中的错误?
有效实现伪代码
if (neither Cache-Control nor Expires is set) {
set safe default for Cache-Control and Expires
}
由于两个或更多个标题需要被视为一个组,因此该Header setifempty
指令是不够的。
相反,我想出了下面的方法,在代理请求后应用,并从代理系统获得响应。
SetEnvIfExpr "-n resp('Cache-Control') || -n resp('Expires')" response_has_cache_headers
Header set Cache-Control "private, max-age=0, no-cache" env=!response_has_cache_headers
Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=!response_has_cache_headers
但是,无论从代理后端系统发送的响应标头的值是什么,SetEnvIfExpr 总是计算结果为 false。
我们正在使用最新的 Apache 2.4,mod_setenvif 和 mod_headers 已启用。