0

У нас есть веб-сервер, который обнаружил api, где клиент может загрузить файл. Этот файл считывается на сервере и выполняется определенная обработка, и генерируется ответ HTTP с кодом состояния 200. Иногда, однако, файл с данными в неправильном формате принимается сервером. Как следует обращаться с этим делом? Предоставляя исключение или возвращая 400-й запрос?Как веб-сервер обрабатывает HTTP-запрос, в котором файл POSTed by client имеет данные в неправильном формате?

EDIT -

бросает эквивалентное исключение для возвращения 500 код статуса? Должно ли это быть использовано в этом случае?

ответ

1

На мой взгляд, нельзя использовать коды, отличные от 200, чтобы сообщать клиентам проблемы на уровне приложений, эти коды зарезервированы исключительно для функций уровня HTTP.

Это имеет смысл только вернуть 200 код и место на уровне приложений код/​​сообщение об ошибке/что в теле ответа HTTP

Однако, есть по крайней мере один протокол, который использует 500 кодов для связи на уровне приложений сбои: SOAP. Например, вот глава ответ HTTP, содержащий сообщения об ошибке SOAP:

HTTP/1.1 500 Internal Server Error 
Content-Type: application/soap+xml; charset="utf-8" 
Content-Length: nnnn 

<?xml version='1.0' ?> 
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> 
    <env:Body> 
    <env:Fault> 
    <env:Code> 
     <env:Value>env:Sender</env:Value> 
     <env:Subcode> 
     <env:Value>rpc:BadArguments</env:Value> 
     </env:Subcode> 
    </env:Code> 

Но, во всяком случае, вы видите, что не только 500 HTTP код ошибки возвращается, но данные на уровне приложений (SOAP) входит в сложную информацию о что случилось.

В конечном счете, вам решать, будете ли вы использовать что-то помимо 200 для вашего протокола. Требования вашего клиента будут определять, достаточно ли одного кода ошибки 500, чтобы они могли полностью сообщить об ошибке и это стало причиной. Если этого достаточно, вам больше ничего не нужно. Если это не так, придумайте свой протокол или, лучше, используйте существующий, например SOAP или REST.

+0

Выбрасывает исключение, эквивалентное возврату кода состояния 500? Должно ли это быть использовано в этом случае? – Pranav

+0

Я думаю, что Tomcat вернет 500, если ваше исключение оставляет метод 'doPost'. Опять же, это не уместно с моей точки зрения, поскольку вы должны сообщать об исключении в теле ответа HTTP 200 - просто придумайте свой формат для этой цели и завершите его в ответ HTTP 200. –

+0

Поскольку это не вопрос одного ответа, имеет смысл спросить его на programers.stackexchange.com. –