我有以下设置 – node-http-proxy充当反向代理,根据需要将所有请求转发到nginx / socket.io
我的问题是这样的当我从浏览器发送一个HTTP DELETE请求时,node-http-proxy添加一个头“Transfer Encoding Chunked”作为来自浏览器的请求没有内容长度。 来自浏览器的请求没有内容长度,因为它没有内容。 Nginx不喜欢传输编码分块头并且抛出一个411请求内容长度。
当我发送虚拟数据作为DELETE请求的一部分时,问题就解决了,所以有一个Content Length和node-http-proxy不会添加Transfer Encoding的块头,而nginx很高兴。
我想了解node-http-proxy是否按预期工作,因为它没有Content Body,因此在Content Length丢失时添加了Transfer Encoding Chunked标头。
编辑 – 更多信息:
当我尝试删除node-http-proxy并直接发送请求到nginx时,nginx很高兴。 请注意,浏览器不会设置内容长度(正文为正文)或传输编码分块
从RFC 2616 – “请求中消息体的存在通过在请求的消息头中包含内容长度或传输编docker字段来表示。” 所以我认为nginx是正确的期待内容长度,因为它认为它有一个消息体。
您可以尝试显式设置Content-Length为0。
另请尝试: http : //wiki.nginx.org/HttpChunkinModule
我在我的设置中遇到了完全相同的问题。 详情可以在这里find: http : //development.blog.saw.sonyx.net/2012/11/http-delete-failing-with-411.html
我最终修补了http-proxy来为DELETE请求添加内容长度。 你可以在我的http-proxy的fork上find补丁:
https://github.com/ian7/node-http-proxy/commit/642a838093286da3b3b84726e38dcf3f8748f7f0