HTML页面上的preg_replace给出了net :: ERR_INVALID_CHUNKED_ENCODING

时间:2014-11-07 09:46:49

标签: php html curl transfer-encoding

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

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

1 个答案:

答案 0 :(得分:1)

Chunked transfer-encoding是一种HTTP 1.1功能,当服务器开始发送数据时,服务器不知道资源的大小,因此它向客户端发送一系列“块”,每个块前面都有大小(以块为单位的十六进制字节数。

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

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

请参阅此处了解规范:https://tools.ietf.org/html/rfc7230#section-4.1