Подтвердить что ты не робот

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

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

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

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

  • 406 - Не допускается
  • 415 - Неподдерживаемый тип носителя

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

Чтобы процитировать RFC2616:

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

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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