1. Was ist HTTP -Protokoll?
HTTP ist die Abkürzung des Hypertext -Transferprotokolls. Es handelt sich um ein Anwendungsschichtprotokoll des TCP/IP-Protokolls, mit dem der Prozess des Datenverfahrens zwischen dem Webbrowser und dem Webserver definiert wird. Nachdem der Client eine Verbindung zum Webserver hergestellt hat, müssen Sie sich an ein bestimmtes Kommunikationsformat einhalten, wenn Sie eine bestimmte Webressource auf dem Webserver erhalten möchten. Das HTTP -Protokoll wird verwendet, um das Format für den Client mit dem Webserver zu definieren.
2. HTTP -Protokollversion
HTTP -Protokollversion: http/1.0, http/1.1
3. Die Differenz zwischen http1.0 und http1.1
Nachdem der Client eine Verbindung mit dem Webserver hergestellt hat, kann im HTTP 1.0 -Protokoll nur eine Webressource erhalten werden.
Im Protokoll von HTTP 1.1 werden nach dem Erstellen des Clients eine Verbindung mit dem Webserver auf einer Verbindung hergestellt.
4. HTTP -Anfrage
4.1. Inhalt in HTTP -Anfragen enthalten
Nachdem der Client eine Verbindung zum Server hergestellt hat, fordert er eine bestimmte Webressource vom Server an, der als Client bezeichnet wird und eine HTTP -Anforderung an den Server sendet.
Eine vollständige HTTP -Anforderung enthält den folgenden Inhalt: eine Anforderungszeile, mehrere Nachrichtenüberschriften und ein Beispiel für den Inhalt der Entität:
4.2. Details zu HTTP -Anfragen - Anforderungszeile
Die Anforderungszeile wird als Anforderungsmethode bezeichnet. Zu den Anforderungsmethoden gehören: Post, Get, Kopf, Optionen, Löschen, Verfolgung, Put und häufig verwendete gehören: Get, Post
Wenn der Benutzer standardmäßig keine Einstellungen hat, sendet der Browser GET -Anforderungen an den Server. Zum Beispiel wird der Zugriff direkt in den Browser eingegeben, der Zugriff wird auf Hyperlink usw. usw. sind alle erhalten. Wenn der Benutzer die Anforderungsmethode ändern möchte, kann er die Formularübermittlungsmethode ändern.
Ob Post oder Get verwendet wird, um eine Webressource vom Server anzufordern. Der Unterschied zwischen diesen beiden Methoden spiegelt sich hauptsächlich in der Datenübertragung wider: Wenn die Anforderungsmethode erhalten ist, kann die an den Server übertragenen Daten in Form eines? Nach der angeforderten URL -Adresse und mehreren Daten werden mehrere Daten durch &, zum Beispiel: get /mail/1.html?name=abc&password=xyz http/1.1 getrennt
Merkmale der GET -Methode: Die an die URL -Adresse angeschlossenen Parameter sind begrenzt und die Datenkapazität darf normalerweise 1K überschreiten.
Wenn die Anforderungsmethode nach Post ist, können Daten im angeforderten Entitätsinhalt an den Server gesendet werden. Die Eigenschaften der Postmethode sind: Die Menge der übertragenen Daten ist unbegrenzt.
4.3. Details zu HTTP -Anfragen - Nachrichtenheader
Gemeinsame Nachrichtenüberschriften in HTTP -Anfragen
Akzeptieren: Der Browser teilt dem Server über diesen Header und den von ihm unterstützten Datentyp mit. Accept-Charset: Der Browser teilt dem Server über diesen Header mit, der das Zeichen unterstützt. Akzeptieren: Der Browser teilt dem Server über diesen Header und das unterstützte Komprimierungsformat Akzeptieren der Sprache: Der Browser teilt dem Server über diesen Header und seinen Lokalschale-Host an: Der Browser sagt den Server über diesen Header und auf welchen Host zugreifen soll. IF-MODIFIFATIVE-SINCE: Der Browser teilt dem Server über diesen Header und die Zeit, um Daten zu leiten. Referer: Der Browser teilt dem Server über diesen Header mit und von welcher Seite der Client stammt. Verbindung: Der Browser teilt dem Server über diesen Header mit und ob er den Link oder den Link nach Abschluss der Anforderung trennen soll.
Zum Beispiel:
Akzeptieren: Anwendung/X-MS-Anwendung, Bild/JPEG, Anwendung/XAML+XML, Image/GIF, Bild/PJPEG,
application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */ *
Referer: http: // localhost: 8080/javawebdemoproject/web/2.jsp
Akzeptieren Sprache: ZH-CN
Benutzer-Agent: Mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; Wow64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729;
Akzeptanzkodierung: Gzip, Deflate
Host: Localhost: 8080
Verbindung: Keep-Alive
5. HTTP -Antwort
5.1. Inhalt in der HTTP -Antwort enthalten
Eine HTTP -Antwort repräsentiert Daten, die vom Server an den Client zurückgesendet wurden, einschließlich: eine Statuszeile, mehrere Nachrichtenüberschriften und Entitätsinhalte.
Beispiel:
Http/1.1 200 Okserver: Apache-Coyote/1.1Content-Typ: text/html; charset = ISO-8859-1Content-Länge: 105Date: TUE, 27. Mai 2014 16:23:28 GMT <html> <Head> <titels> Hallo Weltwolder </title> </title> </title> </title> </title> </title> </title> </title> </title> </title> </title> </title> </title> </body> </html>
5.2. Details zur HTTP -Antwort - Statuszeile
Statuszeilenformat: HTTP -Versionsnummer Statuscode Anweisung <CRLF>
Beispiel: http/1.1 200 OK
Der Statuscode wird verwendet, um das Verarbeitungsergebnis des Servers der Anforderung darzustellen. Es ist eine dreistellige Dezimalzahl. Die Antwortstatuscodes sind in 5 Kategorien unterteilt, wie unten gezeigt:
5.3. HTTP -Antwortdetails - häufig verwendete Antwort Header
Gemeinsame Antwort -Header (Nachrichtenüberschreitungen) in HTTP -Antworten
Ort: Der Server verwendet diesen Header, um dem Browser mitzuteilen, wo er zum Server springt: Der Server verwendet diesen Header, um dem Browser das Modell des Serverinhalts-Codierens mitzuteilen: Der Server verwendet diesen Header, um dem Browser das Komprimierungsformat der Dateninhalte-Länge mitzuteilen: Der Server verwendet diesen Header. Content-Typ: Der Server verwendet diesen Header, um dem Browser zu mitteilen, dass die Art der Daten zur Aktualisierung zurückgegeben werden soll Cache-Control: No-Cache
Pragma: No-Cache
6. Stellen Sie die Antwortheader auf dem Server fest, um das Verhalten des Clientbrowsers zu steuern
6.1. Stellen Sie den Standort der Standortantwort ein, um die Umleitung von Anforderungen zu realisieren
Paket gacl.http.study; import Java.io.ioxception; import Javax.servlet.servletException; import Javax.servlet.http.httpserd; GaCl * */public class ServletDemo01 erweitert HttpServlet (public void dagget (httpServletRequest), HttpServletResponse -Antwort, ServletException, IOException {response.setStatus (302); // Setzen Sie den Server -Status -Code. Dies ist die sogenannte Anforderung Umleitung*/response.setheader ("Ort", "/javaweb_httpprotocol_study_20140528/1.jsp"); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }}Wenn Sie die URL -Adresse "http: // localhost: 8080/javaweb_httpprotocol_study_20140528/servlet/servletDemo01" verwenden, um auf ServletDEMO01 zuzugreifen, können Sie den Statuscode und die an den Browser gesendeten Reaktion auf den Browser nach dem Server nach der Figur unter den Figuren unter der Figur unterhalb der Figur unter folgenden Angaben sehen.
Der Server gibt einen 302 -Statuscode zurück, um dem Browser mitzuteilen, dass ich nicht über die gewünschten Ressourcen verfügt, aber ich sage Ihnen, wo er über den Standort der Standort -Antwort liegt. Nachdem der Browser den Antwortheader analysiert hat, weiß es, dass er zur Seite /javaweb_httpprotocol_study_20140528/1.jsp springen möchte, sodass es automatisch auf 1.JSP springt, wie in der Abbildung unten gezeigt:
6.2. Legen Sie den inhaltskodierenden Antwortheader ein, um dem Browser das Komprimierungsformat der Daten zu mitteilen
Paket gacl.http.study; import Java.io.BytearrayoutputStream; Import Java.io.ioException; importieren java.util.zip.gzipoutputStream; importieren javax.servlet.servlet; import Javax.Servlet.http.httplet; javax.servlet.http.httpServletRequest; import javax.servlet.http.httpsertRequest; importieren javax.servlet.http.httpservletresponse;/***@author gacl*Dieser Applet wird die folgenden zwei kleinen Wissenspunkte demonstrieren. Verwenden Sie den GzipoutputStream -Stream, um Daten zu komprimieren*2. Legen Sie den Inhaltscodieren des Antwortheaders fest, um dem Browser mitzuteilen, dass das komprimierte Format der vom Server zurückgesendeten Daten*/public class ServletDEMO02 httpServlet {public void dagget (httpServletRequest-Anforderung, httpServletResponse-Antwort) verlängert, servletException, ioException {String Data = String Data = "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDADA bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc DABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDADA bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcDabcDabcDabcdabcDabcDabcDabcDabcDabcDabcDabcDabcDabcDabcDabcDabcdd "cdabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "CDABCDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDABCDABCD"; System.out.println ("原始数据的大小为 :" + data.getBytes (). Länge); BytearrayoutputStream bout = new bytearrayoutputStream (); GzipoutputStream gicht = new gzipoutputStream (kop); // buffer gout.write (data.getBytes ()); gicht.close (); // Erhalten Sie das komprimierte Daten Byte g [] = bout.tobytearray (); response.setheader ("Inhaltscodierung", "gzip"); response.setheader ("inhaltliche Länge", G.Length +""); response.getOutputStream (). Schreiben (g); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }}Die vom Server an den Browser gesendeten Antwortinformationen sind wie folgt:
Die vom Browser unterstützten Komprimierungsformate sind:
6.3. Legen Sie den Reaktionsheader vom Typ des Inhalts fest und geben Sie den Loopback-Datentyp an
Paket gacl.http.study; import Java.io.ioxception; import Java.io.inputStream; import Java.io.outputStream; import Javax.servlet.servletException; importieren javax.servlet.http.httpServlet; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo03 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * The data types that the browser can receive (Accept) are: * 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, */ response.setHeader("content-type", "Image/JPEG"); // Verwenden Sie den inhaltlichen Antwortkopf, um den Datentyp anzugeben, der an den Browser als "Image/JPEG" gesendet wird. this.getServletContext (). getResourceAsStream ("/img/wp_20131005_002.jpg"); Byte Buffer [] = neues Byte [1024]; int len = 0; OutputStream out = response.getOutputStream (); // den Ausgabestream abrufen ((len = in.read (puffer))> 0) {// den Inhalt im Eingabestream (in) und speichern Sie sie im Puffer (Puffer) out.write (Puffer, 0, len). HttpServletResponse -Antwort) löst ServletException aus, iOException {this.doget (request, response); }}Die vom Server an den Browser gesendeten Antwortinformationen sind wie folgt:
Die laufenden Ergebnisse von ServletDEMO03 sind in der folgenden Abbildung dargestellt:
Bilder werden im Browser angezeigt
6.4. Stellen Sie den Reaktions -Reaktions -Header ein, um den Browser regelmäßig zu aktualisieren
Paket gacl.http.study; import Java.io.ioxception; import Javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpletrequest; erweitert HttpServlet {public void dodget (httpServletRequest Request, httpServletResponse -Antwort), die ServletException, IOException { / ** * den Refresh -Antwort -Header festlegen, um den Browser regelmäßig alle 3 Sekunden * / // Antwort zu lassen. /** * Setzen Sie den Represction -Antwort -Header, um den Browser in 3 Sekunden auf http://www.baidu.com springen zu lassen. Antwort.getWriter (). Write ("GaCl"); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {this.doget (Request, Antwort); }} 6.5. Setzen Sie die Response-Header in Content-Disposition, um den Browser die Datei herunterzuladen
Paket gacl.http.study; import Java.io.ioxception; import Java.io.inputStream; import Java.io.outputStream; import Javax.servlet.servletException; importieren javax.servlet.http.httpServlet; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo05 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * Set the content-disposition response Header, um den Browser die Datei herunterzuladen */ response.setheader ("Inhaltsdisposition", "Anhang; Dateiname = xxx.jpg"); InputStream in = this.getServletContext (). GetResourceAsStream ("/img/1.jpg"); Byte Buffer [] = neues Byte [1024]; int len = 0; OutputStream out = response.getOutputStream (); while ((len = in.read (puffer))> 0) {out.write (puffer, 0, len); }} public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, IOException {this.doget (request, Antwort); }}Beim Zugriff auf ServletDEMO05 im Browser wird das Datei -Download -Feld angezeigt, wie in der folgenden Abbildung gezeigt:
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.