Есть ли способ избежать ошибок nginx 411 Content-Length?

11

Я получаю 411 статус от nginx при попытке сделать PUT без указания длины содержимого. Есть ли способ отключить это?


источник

Ответы:

10

Вы можете попробовать добавить это к вашему запросу:

curl -i -X ​​PUT -H 'Длина содержимого: 0' ' http://www.example.com/test '

Попробуйте установить HttpChunkinModule или обновить Nginx до 1.3.9+

Этот модуль больше не нужен для Nginx 1.3.9+, поскольку начиная с версии 1.3.9 ядро ​​Nginx уже имеет встроенную поддержку для фрагментированных тел запросов.

Studer
источник
5

PUT-запросы требуют Content-Length. Это не Nginx, это HTTP, который делает это требование. Запрос PUT, как и запросы POST, обязательно должен иметь тело контента. Это тело может быть нулевой длины, но если это так, то вы должны явно сказать об этом. Очевидно, вы не можете предполагать, что контент продолжается до тех пор, пока соединение не будет закрыто (что и подразумевает отсутствующий заголовок длины контента), поскольку сервер должен иметь возможность ответить на запрос до того, как соединение будет закрыто.

tylerl
источник
3
это неверно w3.org/Protocols/rfc2616/rfc2616-sec4.html «О наличии тела сообщения в запросе сигнализирует включение поля заголовка Content-Length или Transfer-Encoding в заголовки сообщения запроса». Это ошибка в nginx, которая исправлена ​​в более поздних версиях. Обратите внимание, что эта ошибка была исправлена ​​для POST задолго до PUT.
Ник Палмер
2

Старый вопрос, но так как я наткнулся на это из веб-поиска:

NginX 1.3.9 и выше поддерживает «Transfer-Encoding: chunked» из коробки для POST и PUT.

При передаче по частям вы можете отправлять файлы без предварительной настройки длины содержимого.

Deestan
источник
Да, это исправило, спасибо!
rogerdpack