У меня следующая настройка - node-http-proxy действует как обратный прокси-сервер, перенаправляя все запросы на nginx / socket.io по мере необходимости
Моя проблема заключается в следующем. Когда я отправляю HTTP-запрос DELETE из браузера, node-http-proxy добавляет заголовок «Transfer Encoding Chunked», поскольку запрос из браузера не имеет длины содержимого. Запрос от браузера не имел длины содержимого, так как не имел тела. Nginx не любит сегментированный заголовок Transfer Encoding и выдает 411 с запросом Content-Length.
Проблема решается, когда я отправляю фиктивные данные как часть запроса DELETE, поэтому есть длина содержимого, а node-http-proxy не добавляет заголовок Transfer Encoding Chunked, и nginx счастлив.
Я хочу понять, работает ли node-http-proxy не так, как ожидалось, потому что он добавляет заголовок Transfer Encoding Chunked, когда Content Length отсутствует, потому что нет Content Body.
РЕДАКТИРОВАТЬ - Дополнительная информация:
Когда я попытался удалить node-http-proxy и напрямую отправить запрос в nginx, nginx был доволен этим. Обратите внимание, что ни длина содержимого (так как тело пустое), ни фрагментированное кодирование передачи не устанавливаются браузером.
Из RFC 2616 - «Присутствие тела сообщения в запросе сигнализируется включением поля заголовка Content-Length или Transfer-Encoding в заголовки сообщения запроса». Поэтому я думаю, что nginx прав, ожидая Content-Length, поскольку он думает, что у него есть тело сообщения.
Вы можете попробовать явно установить Content-Length равным 0.
Также попробуйте: http://wiki.nginx.org/HttpChunkinModule
У меня возникла точно такая же проблема в моей настройке. Подробности можно найти здесь: http://development.blog.saw.sonyx.net/2012/11/http-delete-failing-with-411.html
В итоге я исправил http-прокси, чтобы добавить длину содержимого для запросов DELETE. Вы можете найти патч на моей вилке http-прокси здесь:
https://github.com/ian7/node-http-proxy/commit/642a838093286da3b3b84726e38dcf3f8748f7f0