![有没有办法避免 nginx 411 Content-Length 必需错误?](https://linux22.com/image/519856/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E9%81%BF%E5%85%8D%20nginx%20411%20Content-Length%20%E5%BF%85%E9%9C%80%E9%94%99%E8%AF%AF%EF%BC%9F.png)
当我尝试执行 PUT 操作而未指定内容长度时,nginx 返回了 411 状态。有什么方法可以防止这种情况发生吗?
答案1
您可以尝试将其添加到您的查询中:
curl -i -X 放-H'内容长度:0'‘http://www.example.com/test‘
尝试安装HttpChunkin模块或更新Nginx 升级至 1.3.9+
Nginx 1.3.9+ 不再需要此模块,因为从 1.3.9 开始,Nginx 核心已经内置了对分块请求主体的支持。
答案2
PUT 请求需要 Content-Length。这不是 Nginx,而是 HTTP 提出了这个要求。PUT 请求与 POST 请求一样,必须有一个内容主体。该主体的长度可以为零,但如果是,则必须明确说明。显然,您不能假设内容会一直持续到连接关闭(这是缺少 content-length 标头所暗示的),因为服务器必须能够在连接关闭之前响应请求。
答案3
这是一个比较老的问题,但是我在网上搜索时偶然发现了这个问题:
NginX 1.3.9 及更高版本对 POST 和 PUT 开箱即用地支持“Transfer-Encoding: chunked”。
使用分块传输,您可以发送文件而无需先设置内容长度。