Может ли запрос HTTP OPTIONS возвращать 204 или он всегда должен возвращать 200?

В соответствии сhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2 единственный ответ, когда-либо упомянутый в отношении запроса HTTP OPTIONS, - это 200. Однако, по-видимому, бывают случаи, когда длина содержимого равна 0, когда 204 будет более подходящим. Уместно ли для запроса HTTP OPTIONS возвращать 204?

 sideshowbarker29 янв. 2019 г., 08:11
Что касается правильного кода состояния для ответов на запрос предварительных проверок CORS, см. Ответ наstackoverflow.com/questions/46026409/..., Суть в том, что вы можете вернуть 204 за это, если хотите, но что касается протокола CORS, браузеры нене волнует, если этоs 200, 204 или другой ответ 2xx - все, что находится в диапазоне от 200 до 299, рассматривается точно так же, как и обработка CORS-протокола браузерами.

Ответы на вопрос(2)

RFC 2616 говорит:

200 ответ ДОЛЖЕН ...

...

Если тело ответа не включено, ответ ДОЛЖЕН включать поле Content-Length со значением поля «0».

что действительно делает неясным, относится ли 200 ко всему абзацу или только к первому предложению. Если вы хотите быть осторожны, выпусть ДОЛЖЕН иметь приоритет (и это нет стоит дорого).

RFC 7231, который устарел RFC 2616, изменил формулировку на

Сервер, генерирующий успешный ответ на ВАРИАНТЫ, ДОЛЖЕН ...

...

Сервер ДОЛЖЕН генерировать поле Content-Length со значением «0» если в ответе не будет отправлено тело полезной нагрузки.

что делает последнее предложение применимым в общем смысле к статусам 2xx, и ДОЛЖЕН преобладать.

Таким образом, длина содержимого ДОЛЖНА быть отправлена. Но Content-Length не может быть отправлен с 204:

RFC 2616 говорит это так:

Присутствие тела сообщения в запросе сигнализируется включением поля заголовка Content-Length или Transfer-Encoding ...

... Все ответы 1xx (информационный), 204 (без содержимого) и 304 (без изменений) НЕ ДОЛЖНЫ содержать тело сообщения.

И RFC 7230 также разъясняет это:

Сервер НЕ ДОЛЖЕН отправлять поле заголовка Content-Length в любом ответе с кодом состояния 1xx (информационный) или 204 (без содержимого).

Тот'Во всяком случае, я так понимаю.

 katomaso06 мар. 2019 г., 06:50
OPTIONS всегда должен возвращать код 2xx, иначе 1. в ответе отсутствует Content-Length 2. ваш предпечатный запрос не выполняется, и вы не можете (например) поместить новые файлы в webdav. К сожалению, сегодня nginx и lighttpd ошибаются, и я отчаяние, чтобы найти хорошую замену для них.
Решение Вопроса

он может вернуть 204. Или 400. Или 404. Нет общих ограничений относительно того, какие коды состояния может вернуть метод.

Также обратите внимание, что этовремя перестать смотреть на RFC 2616. Смотритеhttp://trac.tools.ietf.org/wg/httpbis/trac/wiki.

 Stylpe27 сент. 2018 г., 12:23
@rogerdpack Я думал то же самое, но мыНам просто пришлось изменить приложение с 204 на 200, потому что Firefox строго следит за отсутствием заголовка Content-Length, поэтомуне правда ли сегодня, что "на практике браузеры естьХОРОШО" с 204 "! Таким образом, другой ответ от amichair правильный, а этот неправильный.
 7648425 апр. 2017 г., 06:07
Предположительно второй "Или 400 ", должно быть, "Или 404 " (или что-то еще не 400).
 rogerdpack16 авг. 2017 г., 22:59
Что вы думаете о другом ответе здесь? Хотя, похоже, на практике браузерыХОРОШО" с 204 FWIW ... стандартом де-факто, для победы! :)
 Julian Reschke27 сент. 2018 г., 14:33
@rogerdpack - fwiw, ответ не 'неправильно только потому, что какой-то браузер неправильно реализовать HTTP. Если вы считаете, что нашли ошибку в браузере, вам нужно открыть тикет.

Ваш ответ на вопрос