如果Content-Length只是近似值,那么发送HTTP的最佳方法是什么?

时间:2015-10-21 16:36:36

标签: http

我编写了一个CGI程序,通过HTTP发送大量动态生成的数据。但是,我事先并不知道确切的内容长度。

我无法将整个响应存储在内存中以计算字节数,因为工作集很多GB。

同样,我无法在开始传输之前遍历数据,因为传输所需的时间比HTTP请求的典型超时要长得多 - 将响应写入{{1}需要几分钟}。

然而,我可以猜测内容长度在1.5左右。

所以,如果我发送

/dev/null

然后写一个长度为233的主体,并优雅地Status: 200 OK Content-Length: 328 套接字,HTTP客户端会认为它是否成功?

一个数据点是wget似乎发送了带头文件的第二个请求

close(2)

好的,我已为此做好准备,并做出回应

Range: bytes=234-

这里是完整的wget会话(使用微小的模拟数据):

Status: 416 Range Not Satisfiable

所以,wget以返回代码0退出,这似乎表示成功 - 这就是应该发生的事情!

问题是:这是正确的,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

这不正确。如果您事先不知道内容长度,请不要发送Content-Length标头字段。相反,使用分块编码。 (有关详细信息,请参阅RFC 7230)