You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Transfer-Encoding请求头未被PHP服务端正确解析?

问题原因

导致该问题的核心原因有两个:

  • 请求头冲突,分块编码配置未生效

你使用--data参数提交数据时,curl会自动计算请求体长度并添加Content-Length请求头,此时你手动添加的Transfer-Encoding: chunked请求头和Content-Length同时存在。
按照HTTP/1.1规范,当请求同时携带Content-Length和Transfer-Encoding头时,服务器必须优先处理Content-Length,忽略Transfer-Encoding配置。所以服务器不会按分块编码规则解析你的请求体,而是直接按Content-Length读取固定长度的内容,最终PHP无法正确解析出user参数,$_POST["user"]为空。

  • Shell转义问题导致请求体格式错误

你在--data参数值中写的\r\n在普通双引号包裹下,不会被Shell解析为实际的回车换行符,只会作为字面量字符传输。你的请求体实际内容是包含字面\r\n的字符串,完全不符合分块编码的格式要求,就算服务器按分块规则解析也无法识别出正确的参数内容。


正确的测试写法

如果要测试分块编码的POST请求,可以让curl自动处理分块逻辑,不需要手动构造分块内容:

curl --data "user=mehran" -H "Transfer-Encoding: chunked" "http://172.16.17.10/pg3.php"

这种写法curl会自动处理分块编码逻辑,不会额外添加Content-Length头,服务器可以正常解析参数,响应中会输出mehran。

内容的提问来源于stack exchange,提问作者mehran_2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:57:00