内容编码标头通过转发代理消失

问题描述

我在Debian 9上遇到Apache 2.4.25的奇怪问题。我正在通过另一个设置为正向代理的Apache服务器卷曲PHP代理中的页面。想法是让所有内容都经过未修改,但出站流量是从代理发出的。

我注意到,当我执行此操作时,如果获取带有Content-Encoding标头的网页,则标头似乎无法通过。当我直接在浏览器中加载页面时,会收到标题。当我尝试在没有代理的情况下卷曲时,我还会获得标头。

如何强制Apache代理不删除此标头,而是按原样传递未经修改的所有标头?不幸的是,文档中似乎没有任何内容,而且必须获得原始的Content-Encoding标头。

解决方法

值得庆幸的是,这个问题不是Apache,而是我在PHP中的curl语句。

添加以下选项可修复该问题:

curl_setopt($ch,CURLOPT_ENCODING,"");

我的灵感来自slightly related question

  • CURLOPT_ENCODING指示curl请求HTTP压缩(如果支持)
  • ""字符串为空,以免强制使用任何特定的压缩方法。如果服务器支持任何形式的压缩,我们将使用该压缩方法返回该页面。

现在,如果我再次运行测试,则会看到以下附加标题:

content-encoding      gzip

不确定为什么没有代理就可以正常工作,但总是最好明确地指定此选项。与大多数浏览器不同,除非您告知PHP cURL,否则它不会请求压缩,但这是一个简单的解决方法。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...