Вопрос по http-status-codes, http-options-method, http – Может ли запрос HTTP OPTIONS возвращать 204 или он всегда должен возвращать 200?

6

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

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

Ваш Ответ

2   ответа
6

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

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

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

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 (без содержимого).

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

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

Похожие вопросы