OWS HTTP response codes
The HTTP standard defines codes for all types of responses. These codes should give the client a clear indication if the request succeeded or not. These codes are set by the (server) application that handles the request. See http://tools.ietf.org/html/rfc2616. The client can assert that the request was successful only if the code is 200. Otherwise the client must check additional header fields or the body to handle the response. E.g. a 301 Moved Permanently response should contain a Location header with the new URL.
The OWS Commons specs are not really clear about which codes should be used in which cases. The 1.0.0 and 1.1.0 spec mentions redirects where the HTTP 3xx codes must be used. The 1.1.0 spec states (OGC 06-121e3, 12.6):
"By nature, the Internet can make remote references sometimes unreachable. When this occurs for URLs in operation requests, and the server is able to detect this occurrence and 'to respond to it, the server should return a valid Exception Message, or 'at least an applicable HTTP status code."
The 1.1.0 spec also describes an abstract test for the HTTP response status code (OGC 06-121r3, A.4.1.5):
a) Test purpose: Verify that a service request which generates an exception produces a response that contains 1) a service exception report, and 2) a status code indicating an error.
b) Test method: TBD. Check the response code in the Status-Line and the message body. Pass if the response code is either 4xx (Client error) or 5xx (Server error) and the body contains a service exception report. Fail otherwise.
Thus at least 1.1.0 explicitly requires non-200 status for all exception reports. However, we are aware that some clients only accept 200 status codes, even for exception reports.
The first deegree 3 services SOS and WPS are based on OWS 1.1.0 and should conform to the standard. Other service implementations may require additional evaluation regarding to client compatibility.