Коды ошибок HTTP 406 и 415
Я пишу веб-сервис, который принимает только JSON, а также выводит только JSON.
поэтому мне нужно вернуть соответствующий код состояния, если запрашивается какой-либо другой формат.
похоже, что у меня есть два варианта:
- 406-Неприемлемо
- 415 - Неподдерживаемый Тип Медиа
было бы здорово, если бы кто-нибудь мог просветить меня относительно семантики двух кодов.
5 ответов:
406 возвращается сервером, когда он не может ответить на основе принятия заголовков запроса (т. е. у них есть заголовок Accept, который утверждает, что они только хочу XML).
415 возвращается сервером, когда сущность, отправленная в запросе (содержимое в POST или PUT), имеет неподдерживаемый тип mediatype (т. е. они отправили XML).
Так.. 406 когда вы не можете отправить то, что они хотят, 415 когда они посылают то, что вы не хотите.
надеюсь, что это поможет!
- 406 если
Acceptзаголовок был отправлен вы не можете fullfill.- 415 если a
Content-Typeотправляется вы не можете использовать.
цитата адресу rfc2616:
406 Неприемлемо
ресурс, идентифицированный запросом способен только генерировать ответ сущности, которые имеют содержимое характеристики не приемлемы согласно примете заголовки отправлены в запросе.
когда клиент запрашивает ваш сервис, проверьте, что
Accept*заголовки он послал; если он не соответствуетapplication/json(или подстановочные знаки, например*/*), вернуть это. Этот ответ должен указывать:"мы здесь обслуживаем только JSON".415 Неподдерживаемый Тип Медиа
сервер отказывается обслуживать запрос, потому что сущность запрос в формате, не поддерживаемом по запрошенному ресурсу для метод запроса.
возвращается
415 Unsupported Media Typeдолжен быть минимальный ответ для "клиент отправил что-то, что не JSON, не может работать с этим"; не уверен, что есть заголовок для указания "вам нужно отправить JSON"
406 используется, когда клиент запрашивает ответ в неподдерживаемом типе контента (в вашем случае, что-либо кроме JSON) с помощью заголовка Accept. 415 С другой стороны, используется, когда клиент публикует или помещает данные в неподдерживаемый тип контента.
в двух словах: используйте 406, если не можете вывести в ожидаемом формате и использовать 415, если вы не поддерживаете входной формат.
RFC2616 поможет вам!
http://www.rfc2616.com/#10.4.7
http://www.rfc2616.com/#10.4.16
Я бы выбрал 415, он вполне соответствует вашему описанию.
Edit: Oh. ИНТЕГРАЛЬНАЯ СХЕМА. "сущность запрос в формате, не поддерживаемом запрошенным ресурсом". Так что если у вас есть запрос с контентом и этот контент имеет неверный тип, вы должны бросить 415 -ответ.
Comments