Завиток POST - 411 Требуемая длина


29

У нас есть RestFUL API, который мы строим на PHP. Если мы сделаем запрос:

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST

Мы вернемся:

411 - Length Required

Хотя, если мы просто добавим -d ""запрос, он будет работать, а ошибки 411 нет. Есть ли способ не требовать добавления -d к команде curl?

Мы используем веб-сервер lighttpd и считаем, что его lighttpd НЕ php, который возвращает ошибку 411.

Ответы:


47

Вы правы - lighttpd не поддерживает запросы POST с пустым телом сообщения без заголовка «Content-Length», установленного в ноль, и CURL отправляет такой запрос. Там и обратно спорят о том, кто прав, но, на мой взгляд, lighttpd не работает. POST без Content-Length и Transfer-Encoding совершенно легален и не имеет тела сообщения.

Добавление -d ""заставляет CURL отправлять Content-Length: 0заголовок, который решает проблему.

Вы можете изменить lighttp. Найдите код, который выдает ошибку 411, и вместо этого установите длину содержимого на ноль.


Спасибо за отличное объяснение, так что нет никакого флага для перехода к curl помимо -d ""директивы lighttpd для установки? -d ""просто выглядит как взломать.
Джастин

1
Это взломать Если вы хотите решить проблему по-настоящему, вам придется изменить lighttpd. Вместо этого вы можете использовать, -d @/dev/nullесли вы думаете, что выглядит лучше. Вы также можете использовать -H "Content-Length: 0". (Я проверил оба из них, они работают.)
Дэвид Шварц

Хорошо спасибо. -d ""кажется лучшим вариантом.
Джастин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.