203 Non-Authoritative Information
Utilisation
Le code de statut 203 Non-Authoritative Information confirme d’abord que la requête a abouti. Le code de statut d’origine n’est pas conservé. Le client n’a aucun moyen de déterminer si le serveur d’origine a renvoyé 200, 201 ou un autre code de succès.
Remarque
Pour cette raison, l’usage du code de statut 203 Non-Authoritative Information est parfois déconseillé. L’en-tête Warning, aujourd’hui obsolète, avec le code 214 (Transformation Applied), a servi d’alternative : il signalait une transformation tout en conservant le code de statut d’origine. L’en-tête Warning a été retiré du standard HTTP.
Exemple
Le client demande une ressource à travers un serveur proxy intermédiaire. Le serveur d’origine stocke la ressource en texte brut. Le proxy convertit la ressource au format JSON avant de transmettre la réponse au client.
Requête
GET /instructions HTTP/1.1
Host: example.com
Réponse du serveur d’origine
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 250
<message body in text format>
Réponse du proxy au client
HTTP/1.1 203 Non-Authoritative Information
Content-Type: application/json
Content-Length: 265
{"response":"<message body embedded in JSON>"}
Approche alternative (héritée)
Obsolète
L’en-tête Warning a été rendu obsolète et relève désormais de l’héritage. Cette approche n’est pas recommandée pour les nouvelles implémentations.
Au lieu d’utiliser le code de statut 203 Non-Authoritative Information, le proxy ajoute un en-tête Warning avec le code 214 (Transformation Applied), ce qui conserve le code de statut d’origine.
Réponse du proxy utilisant l’en-tête Warning
HTTP/1.1 200 OK
Content-Type: application/json
Warning: 214 proxy.example.re "Response converted to JSON format"
Content-Length: 265
{"response":"<message body embedded in JSON>"}
Lorsqu’un en-tête Warning est utilisé à la place du code de statut 203 Non-Authoritative Information, le code de statut d’origine est conservé et le client traite la réponse en conséquence.
Références de code
.NET
HttpStatusCode.NonAuthoritativeInformation
Rust
http::StatusCode::NON_AUTHORITATIVE_INFORMATION
Rails
:non_authoritative_information
Go
http.StatusNonAuthoritativeInfo
Symfony
Response::HTTP_NON_AUTHORITATIVE_INFORMATION
Python3.5+
http.HTTPStatus.NON_AUTHORITATIVE_INFORMATION
Java
java.net.HttpURLConnection.HTTP_NOT_AUTHORITATIVE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION
Angular
@angular/common/http/HttpStatusCode.NonAuthoritativeInformation