Servlets - Codes d'état HTTP
Le format de la requête HTTP et des messages de réponse HTTP sont similaires et auront la structure suivante -
Une ligne d'état initial + CRLF (Retour chariot + Saut de ligne c'est-à-dire Nouvelle ligne)
Zéro ou plusieurs lignes d'en-tête + CRLF
Une ligne vide, c'est-à-dire un CRLF
Un corps de message facultatif comme un fichier, des données de requête ou une sortie de requête.
Par exemple, un en-tête de réponse de serveur se présente comme suit -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
La ligne d'état se compose de la version HTTP (HTTP / 1.1 dans l'exemple), d'un code d'état (200 dans l'exemple) et d'un message très court correspondant au code d'état (OK dans l'exemple).
Voici une liste des codes d'état HTTP et des messages associés qui peuvent être renvoyés par le serveur Web -
Code | Message | La description |
---|---|---|
100 | Continuer | Seule une partie de la demande a été reçue par le serveur, mais tant qu'elle n'a pas été rejetée, le client doit continuer avec la demande |
101 | Protocoles de commutation | Le serveur change de protocole. |
200 | D'accord | La demande est OK |
201 | Établi | La demande est terminée et une nouvelle ressource est créée |
202 | Accepté | La demande est acceptée pour le traitement, mais le traitement n'est pas terminé. |
203 | Informations ne faisant pas autorité | |
204 | Pas de contenu | |
205 | Réinitialiser le contenu | |
206 | Contenu partiel | |
300 | Choix multiples | Une liste de liens. L'utilisateur peut sélectionner un lien et accéder à cet emplacement. Cinq adresses maximum |
301 | Déplacé définitivement | La page demandée a été déplacée vers une nouvelle URL |
302 | A trouvé | La page demandée a été déplacée temporairement vers une nouvelle URL |
303 | Voir autre | La page demandée se trouve sous une autre URL |
304 | Non modifié | |
305 | Utiliser un proxy | |
306 | Inutilisé | Ce code était utilisé dans une version précédente. Il n'est plus utilisé, mais le code est réservé |
307 | Redirection temporaire | La page demandée a été déplacée temporairement vers une nouvelle URL. |
400 | Mauvaise Demande | Le serveur n'a pas compris la demande |
401 | Non autorisé | La page demandée a besoin d'un nom d'utilisateur et d'un mot de passe |
402 | Paiement Requis | Vous ne pouvez pas encore utiliser ce code |
403 | Interdit | L'accès à la page demandée est interdit |
404 | Pas trouvé | Le serveur ne trouve pas la page demandée. |
405 | Méthode Non Autorisée | La méthode spécifiée dans la demande n'est pas autorisée. |
406 | Pas acceptable | Le serveur peut uniquement générer une réponse qui n'est pas acceptée par le client. |
407 | Authentification proxy requise | Vous devez vous authentifier auprès d'un serveur proxy avant que cette demande puisse être servie. |
408 | Délai d'expiration de la demande | La demande a pris plus de temps que le serveur était prêt à attendre. |
409 | Conflit | La demande n'a pas pu être traitée en raison d'un conflit. |
410 | Disparu | La page demandée n'est plus disponible. |
411 | Longueur requise | Le "Content-Length" n'est pas défini. Le serveur n'acceptera pas la demande sans elle. |
412 | La condition préalable a échoué | La condition préalable donnée dans la requête évaluée à false par le serveur. |
413 | Demande d'entité trop grande | Le serveur n'acceptera pas la demande, car l'entité de demande est trop grande. |
414 | Request-url trop long | Le serveur n'acceptera pas la demande, car l'URL est trop longue. Se produit lorsque vous convertissez une demande «post» en une demande «get» avec des informations de requête longues. |
415 | Type de support non pris en charge | Le serveur n'acceptera pas la demande, car le type de média n'est pas pris en charge. |
417 | L'attente a échoué | |
500 | Erreur Interne du Serveur | La demande n'a pas été complétée. Le serveur a rencontré une condition inattendue. |
501 | Pas mis en œuvre | La demande n'a pas été complétée. Le serveur ne prenait pas en charge la fonctionnalité requise. |
502 | Mauvaise passerelle | La demande n'a pas été complétée. Le serveur a reçu une réponse non valide du serveur en amont. |
503 | Service indisponible | La demande n'a pas été complétée. Le serveur est temporairement en surcharge ou en panne. |
504 | Délai d'expiration de la passerelle | La passerelle a expiré. |
505 | Version HTTP non prise en charge | Le serveur ne prend pas en charge la version "protocole http". |
Méthodes pour définir le code d'état HTTP
Les méthodes suivantes peuvent être utilisées pour définir le code d'état HTTP dans votre programme de servlet. Ces méthodes sont disponibles avec l' objet HttpServletResponse .
Sr.No. | Méthode et description |
---|---|
1 | public void setStatus ( int statusCode ) Cette méthode définit un code d'état arbitraire. La méthode setStatus prend un int (le code d'état) comme argument. Si votre réponse comprend un code d'état spécial et un document, veillez à appeler setStatus avant de renvoyer réellement tout le contenu avec PrintWriter . |
2 | public void sendRedirect(String url) Cette méthode génère une réponse 302 avec un en- tête Location donnant l'URL du nouveau document |
3 | public void sendError(int code, String message) Cette méthode envoie un code d'état (généralement 404) avec un court message qui est automatiquement mis en forme dans un document HTML et envoyé au client. |
Exemple de code d'état HTTP
Voici l'exemple qui enverrait un code d'erreur 407 au navigateur client et le navigateur vous montrerait "Besoin d'authentification !!!" message.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Maintenant, appeler le servlet ci-dessus afficherait le résultat suivant -
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29