缓慢的HTTP / 1.1响应,file_get_contents远程服务器

时间:2013-03-10 13:35:32

标签: php html http

我正在通过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分钟从他们的网页上得到我的答案。需要弄清楚如何关闭连接。否则它似乎有效。

1 个答案:

答案 0 :(得分:1)

嗯......似乎在一阵抨击我的头后,答案显而易见。

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

再次编辑:我似乎仍然没有从网站获取gzips,尽管它可以从我的网站上运行。我会尝试从浏览器中复制标题,看看会发生什么。

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

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

编辑4:出于某种原因,我有时会在用户代理中使用早期的MSIE 5.0版本时有时使用gzip:ed和uncompressed。我只能理解将gzip交给能够处理它的用户代理,但至少它应该是一致的。无论如何。问题解决了,谢谢。