Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTTP status code for "success with errors"?

I've poked around a bit, but I don't see an HTTP status code for when a request's succeeds, but there is an error after the "point of no return".

e.g., Say you process a request, its committed to the database, but while returning the result you run of memory, or encounter a NPE, or what have you. It would have been a 200 response, but now, internally, you aren't able to return the proper, well-formed response.

202 Accepted doesn't seem to fit since we've already processed the request.

What status code means "Success, but errors"? Does one even exist?

like image 994
Richard Levasseur Avatar asked Jun 18 '10 03:06

Richard Levasseur


2 Answers

If the server is aware that it has encountered a problem, it should normally return a 5xx error. The most generic one is the 500 Server Error, which the RFC 2616 defines as follows:

500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request.

Then it's the client's responsibility to reattempt the request. If the previous request was partially committed, it's the server's (or the database's) responsibility to roll that back, or to handle the duplicate transaction appropriately.

like image 41
Daniel Vassallo Avatar answered Oct 03 '22 11:10

Daniel Vassallo


HTTP doesn't have such a status code, but there is a best practice that allows you to handle such situations - redirect the user after a POST operation.

Here is a break down -

  1. A POST request tries to modify data on the server
  2. If the server fails, it sends a 500 error to indicate failure
  3. If the server succeeds, it sends a 302 redirect response
  4. The browser then sends a fresh GET request to the server
  5. If this fails, you get a 500 error, otherwise you get a 200

So, your use case of 'Saved data but can't retrieve it immediately' translates to a 302 redirect for the initial POST, followed by a 500 for the subsequent GET.

This approach has other advantages - you get rid of the annoying 'Are you sure you want to resubmit the data?' message. Also keeps your back/forward/refresh buttons usable.

like image 151
Sripathi Krishnan Avatar answered Oct 03 '22 09:10

Sripathi Krishnan