Длина содержимого и кодировка передачи Chunked nginx, node-http-proxy
У меня есть следующие настройки - узел-http-прокси действует как обратный прокси-сервер, перенаправляя все запросы к nginx/socket.io по мере необходимости
Моя проблема заключается в следующем: когда я отправляю запрос HTTP DELETE из браузера, node-http-proxy добавляет заголовок "Transfer Encoding Chunked", так как запрос из браузера не имеет длины содержимого. Запрос из браузера не имеет длины контента, так как не имеет тела. Nginx не нравится разделенный заголовок Transfer Encoding и выбрасывает 411, запрашивая Content-Length.
Проблема решается, когда я отправляю фиктивные данные как часть запроса DELETE, поэтому существует длина содержимого, а узел-http-proxy не добавляет заголовок Transfer Encoding Chunked, и nginx счастлив.
Я хочу понять, работает ли node-http-proxy должным образом, потому что он добавляет заголовок Transfer Encoding Chunked, когда Content Length отсутствует, потому что нет тела Content.
РЕДАКТИРОВАТЬ - Больше информации:
Когда я попытался удалить node-http-proxy и напрямую отправить запрос в nginx, nginx порадовался этому. Обратите внимание, что ни длина содержимого (так как тело имеет emtpy), ни передача кодировки Chunked не устанавливаются браузером
2 ответа
Из 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-proxy здесь:
https://github.com/ian7/node-http-proxy/commit/642a838093286da3b3b84726e38dcf3f8748f7f0