Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: rmkОтветов: 5

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

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

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

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

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

  • Как я могу получить список обслуживаемых типов контента? MUY Belgium 16.03.2018

httphttp-headersweb-services

Ответы

Ответ 1 · рейтинг 142 · nathan

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

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

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

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

Ответ 2 · рейтинг 45 · Wrikken

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

Ответ 3 · рейтинг 8 · Piskvor left the building

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

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

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

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

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

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

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

Ответ 4 · рейтинг 4 · Victor Welling

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

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

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

Ответ 5 · рейтинг -2 · Cheery

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

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы