Возможно ли для сервера вернуть тело с кодом 204? - PullRequest
0 голосов
/ 08 мая 2019

Цитирование https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success:

204 Нет содержимого

Сервер успешно обработал запрос и не возвращает никакого содержимого.

Является ли эта часть о том, что не возвращает никакого содержимого :

  • Применяется по протоколу HTTP, так что можно доверять, что если мы получим 204, то ответ наверняка и обязательноимеет пустое тело?
  • Требуется спецификацией HTTP и широко подчиняется, но не становится невозможным;поэтому на практике, хотя сервер теоретически может отправлять тело с кодом 204, на практике все еще можно предположить, что этого не произойдет, и если это произойдет, то сервер будет поврежден?
  • Теоретически требуется спецификацией HTTP или, по крайней мере, настоятельно рекомендуется;но на практике на это нельзя полагаться, поскольку существуют серверы, которые нарушают это предположение - аналогичным образом веб-браузер не может предположить, что веб-сайт, который он пытается извлечь, наверняка содержит действительный HTML и должен быть готов к обработке противоположной ситуации?

Или, другими словами: если я получаю код ответа HTTP 204, могу ли я безопасно игнорировать возможность получения непустого тела без страха потери данных?Или лучшие практики предписывают, чтобы я проверял, действительно ли тело пусто, а если нет, то я не должен молча отбрасывать возвращаемые данные?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

https://greenbytes.de/tech/webdav/rfc7230.html#message.body.length:

Длина тела сообщения определяется одним из следующих (в порядке приоритета):

  1. Любой ответ на запрос HEAD и любой ответ с кодом состояния 1xx (информационный), 204 (без содержимого) или 304 (не изменен) всегда заканчивается первой пустой строкой после полей заголовка, независимо от заголовка поля, присутствующие в сообщении, и, следовательно, не могут содержать тело сообщения.
0 голосов
/ 08 мая 2019

Там только ваш клиент и сервер. Сервер может быть чем угодно, любым нестандартным программным обеспечением. HTTP это просто текст. Вполне возможно, что какой-то HTTP-сервер выводит код состояния 204 , за которым следует тело ответа. Между этим сервером и вами нет ничего, что могло бы предотвратить это.

Итак, да, это возможно . Это было бы бессмысленно. С вашей стороны, клиент будет совершенно правильно даже прекратить чтение из сокета после того, как вы получите код 204 и полностью откажетесь от тела. Независимо от того, хотите ли вы сделать это, или вы хотите ожидать возможных данных о теле после 204, зависит от вас. Спецификация «204» означает «нет данных тела».

...