2

我有一个简单的 curl 调用,它从服务器检索 HTML 页面,然后preg_replace()在页面中插入一些内容,然后将结果回显到浏览器。

我注意到的是,如果 curl 试图从中获取 HTML 页面的 HTTP 服务器使用 header 'Transfer-Enoding: chunked',则 html 输出将以某种方式被编码(我注意到一些奇怪的迹象)并且preg_replace()调用会完成这项工作,但浏览器只会获取ERR_INVALID_CHUNKED_ENCODING并获胜'不加载页面。必须有一种方法可以替换部分页面而不会弄乱分块编码?

4

1 回答 1

1

分块传输编码是 HTTP 1.1 的一项功能,其中服务器在开始发送数据时不知道资源的大小,因此它向客户端发送一系列“块”,每个块前面都有大小(以块的十六进制字节)。

唉,如果你数据插入到一个块中,当你将它发送到浏览器时,你也必须改变块的大小。当然,或者,你得到完整的东西,做你的替换并在一个块中发送整个响应(甚至没有块)。

一个合适的 HTTP 1.1 客户端应该能够解码这些块,并且一个合适的 HTTP 1.1 服务器应该发送一系列合法的块(一个有点常见的服务器端错误是遗漏了最终的大小为零的块)。

有关规范,请参见此处:https ://www.rfc-editor.org/rfc/rfc7230#section-4.1

于 2014-11-07T13:51:08.333 回答