HTTP 406 и 415 коды ошибок - PullRequest
       5

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

59 голосов
/ 21 июля 2010

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

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

Появляетсячто у меня есть два варианта:

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

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

Ответы [ 5 ]

119 голосов
/ 21 июля 2010

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

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

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

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

37 голосов
/ 21 июля 2010
  • 406, если был отправлен заголовок Accept, вы не можете заполнить его.
  • 415, если отправлено Content-Type, вы не можете использовать.
7 голосов
/ 21 июля 2010

Цитировать RFC2616 :

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

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

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

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

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

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

4 голосов
/ 21 июля 2010

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

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

См. RFC 2616 для определения: 406 и 415

0 голосов
/ 21 июля 2010

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

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

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

Я бы выбрал 415, он вполне соответствует вашему описанию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...