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

rus*_*tyx 5 php apache http chunked-encoding

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

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

我需要它用于测试目的.

小智 3

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

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

  1. 自己发送适当的标头并调用flush()
  2. 手动输出分块的HTTP消息

所以你可能会做类似下面的事情。这个想法是,您需要手动发送自己的标头并手动对自己的消息进行分块。但是,如果您只是不发送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();
Run Code Online (Sandbox Code Playgroud)

  • 模拟分块流不是我想要的,当然我可以通过遵循规范来模拟它。但我真正想要的是根据_真实_响应来测试我的代码,该响应是_保证_正确的。对我来说这是一件心事。 (3认同)