1. Qu'est-ce que le protocole HTTP
HTTP est l'abréviation du protocole de transfert hypertexte. Il s'agit d'un protocole d'application-couche du protocole TCP / IP, qui est utilisé pour définir le processus d'échange de données entre le navigateur Web et le serveur Web. Une fois que le client s'est connecté au serveur Web, si vous souhaitez obtenir une certaine ressource Web dans le serveur Web, vous devez respecter un certain format de communication. Le protocole HTTP est utilisé pour définir le format pour que le client puisse communiquer avec le serveur Web.
2. Version du protocole HTTP
Version du protocole HTTP: HTTP / 1.0, HTTP / 1.1
3. La différence entre http1.0 et http1.1
Dans le protocole HTTP 1.0, après que le client établit une connexion avec le serveur Web, une seule ressource Web peut être obtenue.
Dans le protocole HTTP 1.1, après que le client établit une connexion avec le serveur Web, plusieurs ressources Web sont obtenues sur une seule connexion.
4. Demande HTTP
4.1. Contenu inclus dans les demandes HTTP
Une fois que le client s'est connecté au serveur, il demande une certaine ressource Web du serveur, qui est appelé le client envoyant une demande HTTP au serveur.
Une demande HTTP complète comprend le contenu suivant: une ligne de demande, plusieurs en-têtes de message et un exemple de contenu d'entité:
4.2. Détails des demandes HTTP - Ligne de demande
La ligne GET dans la demande est appelée la méthode de demande. Les méthodes de demande comprennent: Poster, get, head, options, supprimer, tracer, put et couramment utilisés incluent: get, publier
Si l'utilisateur n'a pas de paramètres, par défaut, le navigateur envoie des demandes GET au serveur. Par exemple, l'accès est directement entré dans le navigateur, l'accès est cliqué sur l'hyperlien, etc., etc. sont tous obtenus. Si l'utilisateur souhaite modifier la méthode de demande à publier, il peut modifier la méthode de soumission de formulaire.
La question de savoir si la publication ou le fait est utilisée pour demander une ressource Web au serveur. La différence entre ces deux méthodes se reflète principalement dans la transmission des données: si la méthode de demande est GET, les données remises au serveur peuvent être apportées sous la forme de A? Après l'adresse URL demandée, et plusieurs données sont séparées par et, par exemple: get /mail/1.html?name=abc&password=xyz http / 1.1
Caractéristiques de la méthode GET: Les paramètres attachés à l'adresse URL sont limités et la capacité de données ne peut généralement pas dépasser 1k.
Si la méthode de demande est publiée, les données peuvent être envoyées au serveur dans le contenu de l'entité demandée. Les caractéristiques de la méthode de post sont les suivantes: la quantité de données transmises est illimitée.
4.3. Détails des demandes HTTP - En-tête de message
En-têtes de messages communs dans les demandes HTTP
Accepter: le navigateur indique au serveur via cet en-tête et le type de données qu'il prend en charge. Accept-Charset: le navigateur indique au serveur via cet en-tête, que les caractères le définissent. Accept-codage: le navigateur indique au serveur via cet en-tête, et le format de compression pris en charge acceptant-Language: le navigateur indique au serveur via cet en-tête et son hôte de paramètres régionaux: le navigateur indique au serveur via cet en-tête et à quel hôte pour accéder. If-Modified-Since: Le navigateur indique au serveur via cet en-tête et le temps de mettre en cache les données. Référer: le navigateur indique au serveur via cet en-tête et de quelle page le client provient. Connexion: le navigateur indique au serveur via cet en-tête et s'il faut déconnecter le lien ou le lien une fois la demande terminée.
Par exemple:
Accepter: application / x-ms-application, image / jpeg, application / xaml + xml, image / gif, image / pjpeg,
application / x-ms-xbap, application / vnd.ms-excel, application / vnd.ms-powerpoint, application / msword, * / *
Référent: http: // localhost: 8080 / javawebdemoproject / web / 2.jsp
Accept-Language: ZH-CN
User-Agent: Mozilla / 4.0 (compatible; MSIE 8.0; Windows NT 6.1; Wow64; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .net CLR 3.0.30729; Media Center PC 6.0; .net4.0c; .net4.0e;
Codage d'acceptation: gzip, dégonfler
Hôte: localhost: 8080
Connexion: Keep-Alive
5. Réponse HTTP
5.1. Contenu inclus dans la réponse HTTP
Une réponse HTTP représente les données renvoyées par le serveur au client, qui comprend: une ligne d'état, plusieurs en-têtes de message et un contenu d'entité.
exemple:
Http / 1.1 200 okserver: apache-coyote / 1.1Content-type: text / html; charset = iso-8859-1Content-Length: 105Date: Tue, 27 mai 2014 16:23:28 gmt <html> <adread> <Titre> Hello world jsp </tape> </read> </ body> Hello World! </ body> </html>
5.2. Détails de la réponse HTTP - Ligne d'état
Format de ligne d'état: HTTP Version Numéro Code d'état Instruction Raison <CRLF>
Exemple: http / 1.1 200 ok
Le code d'état est utilisé pour représenter le résultat de traitement du serveur de la demande. Il s'agit d'un numéro décimal à trois chiffres. Les codes d'état de réponse sont divisés en 5 catégories, comme indiqué ci-dessous:
5.3. Détails de réponse HTTP - En-têtes de réponse couramment utilisées
En-têtes de réponse courants (en-têtes de message) dans les réponses HTTP
Emplacement: le serveur utilise cet en-tête pour indiquer au navigateur où passer au serveur: Le serveur utilise cet en-tête pour indiquer au navigateur le modèle du serveur de codage de contenu: le serveur utilise cet en-tête pour indiquer au navigateur le format de compression de la longueur du contenu des données: le serveur utilise ce topo Le serveur utilise cet en-tête pour indiquer au navigateur le type de données à retourner actualiser: le serveur utilise cet en-tête pour dire au navigateur pour actualiser la disposition du contenu: le serveur utilise cet en-tête pour dire au navigateur pour écrire des données de manière téléchargée de transfert-codage sans cache
Pragma: sans cache
6. Définissez les en-têtes de réponse sur le serveur pour contrôler le comportement du navigateur client
6.1. Définissez l'en-tête de réponse de localisation pour réaliser la redirection de la demande
package gacl.http.study; import java.io.ioexception; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpleserReResSerSpERSPERS; GACL * * / classe publique ServletDemo01 étend httpservlet {public void doget (httpsservletRequest request, httpservletResponse) lance ServletException, ioexception {réponse.SetStatus (302); // Définir le code de réponse du serveur / ** * Définir l'en-tête de réponse, et le serveur utilise le chef de localisation pour dire le violon où le vide. Il s'agit de la soi-disant redirection de demande * / réponse.sethEader ("emplacement", "/javaweb_httpprotocol_study_20140528/1.jsp"); } public void doPost (requête httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {this.doget (request, réponse); }}Lorsque vous utilisez l'adresse URL "http: // localhost: 8080 / javaweb_httprotocol_study_20140528 / servlet / servletdemo01" Pour accéder à ServletDemo01, vous pouvez voir le code d'état et les informations d'en-tête de réponse envoyées au solide après le serveur, comme indiqué dans la figure ci-dessous:
Le serveur renvoie un code d'état 302 pour indiquer au navigateur que je n'ai pas les ressources que vous souhaitez, mais je vous dis où elle est via l'en-tête de réponse de localisation. Une fois que le navigateur analyse l'en-tête de réponse, il sait qu'il veut passer à la page /javaweb_httpprotocol_study_20140528/1.jsp, donc il passera automatiquement à 1.jsp, comme indiqué sur la figure ci-dessous:
6.2. Définissez l'en-tête de réponse en codage de contenu pour indiquer au navigateur le format de compression des données
package gacl.http.study; importer java.io.bytearrayoutputStream; import java.io.ioexception; import java.util.zip.gzipoutputStream; import javax.servlet.servlexception; import javax.servlet.http.httpservlet; import; javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; / ** * @author gacl * Cette applet est utilisée pour démontrer les deux points de connaissance suivants * 1. Utilisez GZIPOutputStream Stream pour compresser les données * 2. Définissez le codage de contenu de l'en-tête de réponse pour indiquer au navigateur que le format compressé des données renvoyés par le serveur * / classe publique ServletDemo02 étend httpServlet {public void doget (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioexception {String data = "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabda BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCCDABCDABCDABCDABCDABCDABCDABCCDABCDABCDABCDABCDABCDABCDABCDA "cdabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabccdabcdab" + "CDABCDABCDABCDABCDABCDABCDABDAB" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdabcd"; System.out.println ("原始数据的大小为 :" + data.getBytes (). La longueur); ByteArrayOutputStream Bout = new ByteArrayOutputStream (); GzipOutputStream gout = new gzipOutputStream (coup); // tampon get.write (data.getBytes ()); gout.close (); // Obtenez les données compressées BYTE G [] = Bout.ToByTearray (); Response.Setheader ("Content-Encoding", "GZIP"); Response.sethEader ("Content-Length", G.Length + ""); réponse.getOutputStream (). Write (g); } public void doPost (requête httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {this.doget (request, réponse); }}Les informations de réponse envoyées par le serveur au navigateur sont les suivantes:
Les formats de compression pris en charge par le navigateur sont:
6.3. Définissez l'en-tête de réponse de type contenu et spécifiez le type de données de bouclage
package gacl.http.study; import java.io.ioexception; import java.io.inputStream; import java.io.outputstream; import javax.servlet.servletException; import javax.servlet.http.httpletvlet; importer javax.servlet.http.http. javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; classe publique ServletDemo03 étend httpservlet {public void DOGT Le navigateur peut recevoir (accepter) sont: * Application / X-MS-Application, * Image / Jpeg, * Application / Xaml + XML, * Image / GIF, * Image / Pjpeg, * Application / X-MS-XBAP, * Application / Vnd.ms-Excel, * "Image / JPEG"); // Utilisez l'en-tête de réponse de type contenu pour spécifier le type de données envoyé au navigateur en tant que "image / jpeg" // lisez l'image wp_20131005_002.jpg dans le dossier IMG situé dans le répertoire racine du projet, et renvoie un flux d'entrée d'entrée en intrants dans = this.getServletContext (). getResourceAsStream ("/ img / wp_20131005_002.jpg"); tampon d'octet [] = nouveau octet [1024]; int len = 0; OutputStream Out = Response.getOutputStream (); // Obtenez le flux de sortie while ((len = in.read (tampon))> 0) {// Lisez le contenu dans le flux d'entrée (IN) et stockez-les dans le tampon (tampon) out.write (tampon, 0, Len); // HttpServletResponse Réponse) lève Servlexception, ioException {this.DoGet (request, réponse); }}Les informations de réponse envoyées par le serveur au navigateur sont les suivantes:
Les résultats en cours d'exécution de ServletDemo03 sont présentés dans la figure ci-dessous:
Les images sont affichées dans le navigateur
6.4. Définissez régulièrement l'en-tête de réponse de rafraîchissement pour actualiser le navigateur
Package gacl.http.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpleserrequest; Importer Javax.servlet.http.httpleserSerserSerSserSpERSE; étend httpServlet {public void doGet (demande httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {/ ** * Définissez l'en-tête de réponse de rafraîchissement pour laisser le navigateur se rafraîchir régulièrement toutes les 3 secondes * / // réponse.setheader ("refroidir", "3"); / ** * Définissez l'en-tête de réponse de rafraîchissement pour permettre au navigateur de sauter sur http://www.baidu.com en 3 secondes * / réponse.sethEader ("Refresh", "3; url = 'http: //www.baidu.com'"); réponse.getWriter (). Write ("gacl"); } public void doPost (requête httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {this.doget (request, réponse); }} 6.5. Définissez l'en-tête de réponse de contenu pour laisser le navigateur télécharger le fichier
package gacl.http.study; import java.io.ioexception; import java.io.inputStream; import java.io.outputstream; import javax.servlet.servletException; import javax.servlet.http.httpletvlet; importer javax.servlet.http.http. javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; classe publique ServletDemo05 étend httpservlet {public void DOGGE En-tête pour permettre au navigateur de télécharger le fichier * / réponse.sethEader ("Content-Disposition", "pièce jointe; filename = xxx.jpg"); InputStream dans = this.getServletContext (). GetResourceSstream ("/ img / 1.jpg"); tampon d'octet [] = nouveau octet [1024]; int len = 0; OutputStream out = réponse.getOutputStream (); while ((len = in.read (tampon))> 0) {out.write (tampon, 0, len); }} public void doPost (httpsservletRequest request, httpservletResponse réponse) lève ServletException, ioException {this.doget (request, réponse); }}Lorsque vous accédez à ServletDemo05 dans le navigateur, la zone de téléchargement de fichiers apparaîtra, comme indiqué dans la figure suivante:
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.