如何在网页的每个请求中添加If-Modified-Since HTTP请求头
解决Apache中RequestHeader添加If-Modified-Since头无效的问题
我来帮你排查这个问题——你尝试用mod_headers给CSS/JS/图片等资源的请求头添加If-Modified-Since但没生效,大概率是配置的逻辑、模块状态或者作用范围出了问题,下面是具体的排查和修复方案:
第一步:确认mod_headers模块已启用
<IfModule mod_headers.c>只是个条件判断,如果模块根本没加载,这段配置会直接被跳过。你需要先确保模块已启用:- 对于Debian/Ubuntu系统,执行命令:
a2enmod headers,然后重启Apache - 对于RHEL/CentOS或直接编辑httpd.conf的情况,检查配置文件中是否存在
LoadModule headers_module modules/mod_headers.so,如果被注释了就去掉注释,再重启服务
- 对于Debian/Ubuntu系统,执行命令:
第二步:调整指令类型与作用范围
你的原配置用了append指令,且没有限定作用范围,这两个点都可能导致问题:append会在已有头的基础上追加值,但If-Modified-Since是单值头,重复的话服务器可能无法正确解析;如果想强制设置这个头(不管客户端有没有发送),应该用set指令- 全局配置可能被虚拟主机、目录级的配置覆盖,最好用
FilesMatch限定目标资源类型,确保只对CSS/JS/图片生效
修改后的配置示例:
<IfModule mod_headers.c> <FilesMatch "\.(css|js|png|jpg|jpeg|gif|ico)$"> RequestHeader set If-Modified-Since "Thu, 18 Jan 2018 12:33:10 GMT" </FilesMatch> </IfModule>第三步:检查日志验证配置
重启Apache后,查看错误日志(通常在/var/log/apache2/error.log或/var/log/httpd/error_log),如果存在语法错误或模块加载失败的信息,根据提示修正。同时可以用浏览器的开发者工具(Network面板)查看资源请求头,确认If-Modified-Since是否已被添加。
另外补充一点:If-Modified-Since本质是客户端发给服务器的缓存验证头,正常情况下浏览器会自动根据本地缓存的资源过期时间发送这个头。如果你的需求是强制让服务器返回304缓存,或许可以考虑调整Expires或Cache-Control响应头,效果可能更符合预期。
内容的提问来源于stack exchange,提问作者user2134
相关产品推荐
相关产品推荐

