Мне трудно найти конкретную спецификацию этого в стандарте. У меня есть HTTP-клиент, который не включает Content-Length: 0
заголовок при выполнении запроса PUT, где я не указываю тело, и сервер, который сбивает с толку такие запросы, и мне интересно, какую программу я должен винить.
92
Ответы:
HTTP-запросы имеют тело, если у них есть заголовок Content-Length или Transfer-Encoding ( RFC 2616 4.3 ). Если у запроса нет ни того, ни другого, у него нет тела, и ваш сервер должен рассматривать его как таковой.
Тем не менее, для запроса PUT необычно не иметь тела, и поэтому, если бы я проектировал клиента, который действительно хотел отправить пустое тело, я бы передал Content-Length: 0. Действительно, в зависимости от чтения POST и определения методов PUT ( RFC 2616 9.5, 9.6 ) можно было бы возразить, что тело подразумевается как обязательное, но разумный способ не обрабатывать тело - это принять тело нулевой длины.
источник
PUT
запрос в основном предназначен для создания или обновления файла на сервере. И нет ничего незаконного в том, что файл пустой, не так ли?disable
иenable
являются глаголами. В этом случае я, вероятно, предпочел бы использоватьPATCH
на/users/{id}
конечной точке.Не отвечая на вопрос, но утверждая, как jaxrs позволяет мне часто использовать безтелесные PUT:
Пример размещения без тела: дать пользователю дополнительное разрешение.
PUT / admin / users / {имя пользователя} / разрешение / {разрешение}
источник
Стандарт IETF не требует наличия тела, хотя длина содержимого должна быть равна 0, если тела нет. Используйте метод, подходящий для того, что вы делаете. Если бы вы поместили это в код, учитывая
и удаленная переменная с именем
r
.Сообщение эквивалентно
Пут эквивалентен
и получить эквивалентно
источник
int f(int* resource, int body);
а затем будет вызываться POSTf(&r, x);
- что может делать или не делатьr
то, что сервер считает подходящим. Но он также может возвращать вещи, так что ... может быть, больше похожеy = f(&r, x);
.Что помещается (в смысле глагола) на сервер, если нет контента? В спецификации содержимое называется «закрытой сущностью», но запрос без содержимого не будет иметь закрытой сущности и, следовательно, ничего не будет помещать на сервер.
Если, конечно, вы не хотите ничего ПОГРУЗИТЬ на сервер, в этом случае вы, вероятно, захотите вместо этого УДАЛИТЬ.
источник
Content-Length: 0
или{ }
в JSON в качестве тела?Поле длины содержимого требуется в соответствии со следующим разделом стандарта HTTP / 1.1 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
источник