【发布时间】:2017-02-02 20:33:16
【问题描述】:
我正在开发一个自定义 HTTP 库供我使用。目前我正在实现各种传输类型,当Content-Encoding 设置为gzip 时,我被困在如何从套接字读取所有数据。我检查了GZIP 文件格式,没有指定的迹象表明已到达gzip 文件的结尾。
分块传输指示最后一个块以0\r\n\r\n 结束的位置。
有没有办法检查是否已到达gzip 流的结尾?
【问题讨论】:
我正在开发一个自定义 HTTP 库供我使用。目前我正在实现各种传输类型,当Content-Encoding 设置为gzip 时,我被困在如何从套接字读取所有数据。我检查了GZIP 文件格式,没有指定的迹象表明已到达gzip 文件的结尾。
分块传输指示最后一个块以0\r\n\r\n 结束的位置。
有没有办法检查是否已到达gzip 流的结尾?
【问题讨论】:
gzip 中没有结束流指示器。您必须使用封装层的指示符(即 HTTP)来找出 gzip 流的结束位置,即取决于响应标头的内容长度、分块编码中的最后一个块或 TCP 连接的结束。
【讨论】:
chunked,则必须依靠Content-Length 或套接字闭包来检测数据结束。如果存在Content-Length,则它是正在传输的数据的确切字节长度,因此当您读取了那么多字节时停止读取。有关详细信息,请参阅RFC 2616 Section 4.4 Message Length。