apache mod_substitute 在 curl 中有效,但在浏览器上无效

apache mod_substitute 在 curl 中有效,但在浏览器上无效

我有一个如下所示的 mod_substitute,它在 curl 中运行良好,但在浏览器上却不行。此外,它在除一个页面之外的所有页面上都有效。

我想知道什么原因导致 mod_substitute 在浏览器上不起作用?如何调试和修复此问题?

答案1

为了解决此类问题,最好将浏览器中的标题与 curl 中的标题进行比较(-i--includeflag 将显示标题,-Hflag 可以添加标题),然后从浏览器中向 curl 命令中一次添加一个,直到问题重现。

我读mod_substitute 文档页面的评论部分描述了类似于您所描述的症状,mod_substitute有时不能按预期工作:

事实证明,这是由我们的过滤器链的顺序决定的。DEFLATE 在 SUBSTITUTE 之前运行。对于小文件,DEFLATE 不会执行任何操作,因此它有效。在某些未发送 Accept-Encoding 标头的内部代理上,它可以正常工作。但是,其他时候则不行。最后,这个效果最好:

AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html text/plain text/xml

另一个选择是取消设置mod_substitute应该进行替换的目标资源的 Accept-Encoding 标头。

RequestHeader unset Accept-Encoding

但(可以说)最好使用另一个技巧,这样您就可以同时获得mod_deflate和的好处mod_substitute

答案2

禁用 gzip 压缩可以解决问题。将以下行添加到 httpd.conf SetEnv no-gzip 1 可以解决问题

相关内容