Коды ошибок HTTP 406 и 415

Я пишу веб-сервис, который принимает только json, а также выводит только json.

Поэтому мне нужно вернуть соответствующий код состояния, если запрашивается любой другой формат.

Похоже, у меня есть два варианта:

  1. 406 - не приемлемо
  2. 415 - Неподдерживаемый тип носителя

Было бы здорово, если бы кто-нибудь просветил меня относительно семантики двух кодов.


person rmk    schedule 20.07.2010    source источник
comment
Как я могу получить список обслуживаемых типов контента?   -  person MUY Belgium    schedule 16.03.2018


Ответы (5)


406 возвращается сервером, когда он не может ответить на основе принятия заголовков запроса (т. е. у них есть заголовок Accept, в котором говорится, что им только нужен XML).

415 возвращается сервером, когда объект, отправленный в запросе (контент в POST или PUT), имеет неподдерживаемый медиатип (т. е. они отправили XML).

Итак.. 406, когда вы не можете отправить то, что они хотят, 415, когда они отправляют то, что вам не нужно.

Надеюсь, это поможет!

person nathan    schedule 20.07.2010

  • 406, если был отправлен заголовок Accept, вы не можете его заполнить.
  • 415, если отправлено Content-Type, вы не можете его использовать.
person Wrikken    schedule 20.07.2010

Процитируем RFC2616:

406 Недопустимо

Ресурс, идентифицированный запросом, способен генерировать только объекты ответа, характеристики контента которых неприемлемы в соответствии с заголовками принятия, отправленными в запросе.

Когда клиент запрашивает вашу службу, проверьте, какие Accept* заголовки он отправил; если он не соответствует application/json (или подстановочному знаку, например */*), верните это. В ответе должно быть указано «здесь мы обслуживаем только JSON».

415 Неподдерживаемый тип носителя

Сервер отказывается обслуживать запрос, поскольку объект запроса имеет формат, не поддерживаемый запрошенным ресурсом для запрошенного метода.

Просто возврат 415 Unsupported Media Type должен быть минимальным ответом на «клиент отправил что-то, что не JSON, не может с этим работать»; не уверен, есть ли заголовок, указывающий «вам нужно отправить JSON»

person Piskvor left the building    schedule 20.07.2010

406 используется, когда клиент запрашивает ответ в неподдерживаемом типе контента (в вашем случае, любом, кроме JSON), используя заголовок Accept. 415, с другой стороны, используется, когда клиент отправляет данные POST или PUT в неподдерживаемый тип контента.

В двух словах: используйте 406, если вы не можете вывести в ожидаемом формате, и используйте 415, если вы не поддерживаете входной формат.

Их определения см. в RFC 2616: 406 и 415

person Victor Welling    schedule 20.07.2010

RFC2616 поможет вам!

http://www.rfc2616.com/#10.4.7

http://www.rfc2616.com/#10.4.16

Я бы выбрал 415, он вполне подходит под ваше описание.

Редактировать: О. IC. «сущность запроса имеет формат, не поддерживаемый запрошенным ресурсом». Поэтому, если у вас есть запрос с контентом, и этот контент имеет неправильный тип, вы должны выдать 415 -response.

person Cheery    schedule 20.07.2010
comment
ему нужны оба, 2 разных сценария - person nathan; 21.07.2010
comment
Я ненавижу вопросы, на которые можно ответить прямо из спецификации. Они чертовски хороши в подсчете очков, но требуют быстрых и правильных ответов. :/ - person Cheery; 21.07.2010