4

我正在通过 HTTP 1.0 协议从远程网站获取文件。我想我会很好,并在获取文件时使用 gzip 以最大限度地减少使用的带宽。

无论我如何形成我的标头,我都没有在响应中获得 gzip 压缩的内容,尽管在使用浏览器测试它时它确实如此。我还使用我的代码从我自己的网站获得了 gzip 格式。

我认为这是因为他们的服务器正在使用仅在 HTTP 1.1 中可用的分块传输编码。

我将协议切换到 HTTP 1.1。这是我下面的代码。我的网站对此做出了回答,尽管 1.0 立即执行的操作需要几秒钟。当我在远程网站上尝试它时,它会一直加载而没有回答。

所以我的问题是,为什么 1.1 这么慢?我使用了格式错误的标头还是什么?另外,为什么我的页面回答而另一个没有。有输入吗?谢谢。

$header = array(
    'http' => array(
    'method'  => 'GET',
    'header'  => 'Accept-Encoding: gzip\r\n' .
    'User-Agent: test\r\n)' .
    'Accept-Charset: ISO-8859-1,utf-8\r\n' .
    'Accept-Encoding: gzip, sdhc, deflate\r\n' . 
    'Host: www.mysite.test.com\r\n' .,
    'protocol_version' => '1.1\r\n'
);

$context = stream_context_create($header);
$file_string = file_get_contents('www.mysite.test.com/test.txt', false, $context);

编辑:在达到服务器保持活动限制之前,它肯定会保持连接打开。花了大约 1.1 分钟从他们的网页上得到我的答案。需要弄清楚如何关闭连接。否则它似乎工作。

4

1 回答 1

1

嗯......似乎在我用头撞墙一段时间后答案很明显。

我将 Connection 移到靠近顶部的位置,它突然起作用了,但随后 gzip 设置停止工作。所以我试图弄清楚为什么顺序似乎很重要。似乎我用单引号引用 ' 而不是 " 导致 \r\n 无法正确评估。至少我认为这是问题所在。它现在似乎正在工作. 无论如何,谢谢大家...当我犯这样的简单错误时,我讨厌它...

再次编辑:我似乎仍然没有从该站点获得 gzip,尽管它适用于我的。我将尝试从浏览器复制标题,看看会发生什么。

编辑2:我们走了!它按预期工作。也许他们以某种方式过滤了用户代理或其他什么。

编辑 3:现在我在多次下载同一个文件时得到了非常随机的结果。有时我把它压缩了,有时没有。他们的服务器随机为我提供两个标头之一。唯一的区别是 Vary:Accept-Encoding 和 Content-Encoding:gzip。我认为一旦我告诉它我可以处理它,它总是会发送 gzip?我自己的服务器似乎不断地提供 gzip。

编辑 4:由于某种原因,在用户代理中使用早期的 MSIE 5.0 版本时,我有时会得到 gzip:ed 并且有时会解压缩。我只能理解将 gzip 交给能够处理它的用户代理,但至少它应该是一致的。反正。问题已解决,谢谢。

于 2013-03-10T16:20:04.237 回答