如何使用Apache / PHP中的预告片生成Chunked响应?

时间:2012-08-05 21:15:35

标签: php apache http chunked-encoding

我知道只需在输出中引入sleep(),就可以在PHP中生成分块响应。

但是也可以在PHP中生成Trailer HTTP部分吗?如果没有,一般在Apache 2.2中是否可能?

我需要它用于测试目的。

1 个答案:

答案 0 :(得分:2)

如果发送标头并且未指定Content-Length标头,PHP将默认发送分块响应。如果您熟悉HTTP规范,这是唯一合乎逻辑的事情,因为另一端的客户端需要知道您发送的HTTP消息何时结束,以便它可以停止读取。

如果您想手动执行此操作,则需要...

  1. 自行发送相应的标题并致电flush()
  2. 手动输出分块的HTTP消息
  3. 所以你可能会做类似以下的事情。这个想法是你需要手动发送你自己的标题并手动分块你自己的消息。但是,如果您只是不发送Content-Length标头,那么PHP默认会为您发送一个分块消息。

    header("Transfer-encoding: chunked");
    header("Trailer: X-My-Trailer-Header");
    flush();
    
    echo dechex(strlen($myChunk)) . "\r\n";
    echo $myChunk;
    echo "\r\n";
    flush();
    
    echo "0\r\n";
    flush();
    
    echo "X-My-Trailer-Header: some-value\r\n";
    flush();