Content-Encoding header 通过正向代理消失

Content-Encoding header disappearing through forward proxy

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

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

我如何强制 Apache 代理不删除这个 header,而是逐字传递它收到的所有 header,不加修改?不幸的是,文档中似乎没有关于此的任何内容,我必须获得原始 Content-Encoding header.

问题原来不是 Apache,幸运的是,实际上是我在 PHP.

中的 curl 语句

添加以下选项修复它:

curl_setopt($ch, CURLOPT_ENCODING , "");

slightly related question.

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

现在,如果我再次 运行 进行测试,我会看到以下附加内容 header:

content-encoding      gzip

不确定为什么它似乎在没有代理的情况下也能正常工作,但始终最好明确地指定此选项。与大多数浏览器不同,PHP cURL 不会请求压缩,除非你告诉它,但这是一个简单的修复。