php - HTML 页面上的 preg_replace 给出 net::ERR_INVALID_CHUNKED_ENCODING

标签 php html curl transfer-encoding

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

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

最佳答案

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

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

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

请在此处查看规范:https://www.rfc-editor.org/rfc/rfc7230#section-4.1

关于php - HTML 页面上的 preg_replace 给出 net::ERR_INVALID_CHUNKED_ENCODING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798363/

相关文章:

php - 是否可以评论评论

javascript - 横向和纵向的不同视口(viewport)宽度

PHP cURL 不发送适当的 header

java - "status":400, "error": "Bad Request", "message": "Required Date parameter ' 结束 ' is not present"

php - 将第 3 方表数据拉入 array/json

php - 在 ajax 加载页面后执行 javascript 脚本 - 不起作用

php - 检查 PHP 中是 SOCKS4 还是 5?

html - 嵌套 Div 间距

javascript - 单选按钮图像在 Internet Explorer Edge 中无法正常工作

php - 将任何语言转换为 PHP 源代码