2010-07-20 2 views
50

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

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

Оказывается, что у меня есть два варианта:

  1. 406 - не приемлемо
  2. 415 - Unsupported Media Type

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

ответ

99

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

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

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

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

3

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

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

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

5

Цитирую RFC2616:

406 Не Приемлемое

Ресурс, идентифицируемый запросом способен только генерировать ответ лица которые имеют содержание характеристики неприемлемы в соответствии с принимающими заголовками sen t в запросе.

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

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

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

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

-2

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

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

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

я выбрал бы 415, это устраивает ваше описание довольно хорошо.

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

+0

ему нужны оба варианта, 2 разных сценария – nathan

+0

Ненавижу вопросы, на которые вы можете ответить прямо из спецификации. Они отлично подходят для подсчета очков, но требуют быстрых и правильных ответов. : / – Cheery

31
  • 406 если отправлен заголовок Accept, вы не можете заполнить.
  • 415 если отправлено Content-Type, вы не можете использовать.
Смежные вопросы