Nginx – Content Length and Transfer Encoding Chunked nginx, node-http-proxy

chunkednginxnode.js

I have the following setup –
node-http-proxy acts as a reverse proxy forwarding all requests to nginx/socket.io as necessary

My problem is this
When I send a HTTP DELETE request from the browser, node-http-proxy adds a header "Transfer Encoding Chunked" as the request from the browser had no Content Length. The request from the browser had no Content Length as it had no body.
Nginx doesn't like the Transfer Encoding Chunked Header and throws a 411 asking for Content-Length.

The problem gets solved when I send dummy data as part of the DELETE request so there is a Content Length and node-http-proxy doesn't add Transfer Encoding Chunked header and nginx is happy.

I want to understand if node-http-proxy isn't working as expected, because it adds a Transfer Encoding Chunked header when Content Length is missing because there is no Content Body.

EDIT – More info:

When I tried removing the node-http-proxy and directly sending the request to nginx, nginx is happy about it. Please note, neither Content Length(as the body is emtpy) nor Transfer Encoding Chunked is set by the browser

Best Answer

From RFC 2616 - "The presence of a message-body in a request is signaled by the inclusion of a Content-Length or Transfer-Encoding header field in the request's message-headers.". So I think nginx is right in expecting a Content-Length since it thinks it has a message-body.

You can try explicitly setting Content-Length to 0.
Also try: http://wiki.nginx.org/HttpChunkinModule