Heim >häufiges Problem >Detaillierte Erläuterung des HTTP-Nachrichtenformats
HTTP-Nachrichten sind textorientiert. Jedes Feld in der Nachricht ist eine Zeichenfolge von ASCII-Codes, und die Länge jedes Felds ist ungewiss. HTTP verfügt über zwei Arten von Nachrichten: Anforderungsnachrichten und Antwortnachrichten.
HTTP-Anfragenachricht
Eine HTTP-Anfragenachricht besteht aus einer Anfragezeile und einem Header. Sie besteht aus vier Teilen: , Leerzeile und Anforderungsdaten Die folgende Abbildung zeigt das allgemeine Format der Anforderungsnachricht.
oder
<request-line> <headers> <blank line> [<request-body>
1. Anforderungsheader
Die Anforderungszeile besteht aus dem Anforderungsmethodenfeld und dem URL-Feld und HTTP Das Protokollversionsfeld besteht aus drei Feldern, die durch Leerzeichen getrennt sind. Beispiel: GET /index.html HTTP/1.1.
Zu den Anforderungsmethoden des HTTP-Protokolls gehören GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE und CONNECT.
Die häufigsten sind wie folgt:
1).GET
Die häufigste Anforderungsmethode, wenn der Client eine Anfrage vom Server stellen möchte Wenn Sie beim Lesen eines Dokuments auf einen Link auf der Webseite klicken oder die Webseite durch Eingabe der URL in die Adressleiste des Browsers durchsuchen, wird die GET-Methode verwendet. Die GET-Methode erfordert, dass der Server die über die URL gefundene Ressource in den Datenteil der Antwortnachricht einfügt und sie an den Client zurücksendet. Bei Verwendung der GET-Methode werden die Anforderungsparameter und die entsprechenden Werte an die URL angehängt. Ein Fragezeichen („?“) wird verwendet, um das Ende der URL und den Anfang der übergebenen Anforderungsparameter darzustellen Parameter ist begrenzt. Beispiel: /index.jsp?id=100&op=bind, die über GET übergebenen Daten werden direkt in der Adresse dargestellt, sodass wir das Anforderungsergebnis in Form eines Links an unsere Freunde senden können. Nehmen Sie als Beispiel die Suche nach Domety mit Google. Das Anfrageformat ist wie folgt:
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r
Wie Sie sehen, enthalten GET-Anfragen im Allgemeinen nicht den Teil „Anfrageinhalt“ und die Anfragedaten werden in der Anfrage ausgedrückt Zeile in Form einer Adresse. Der Adresslink lautet wie folgt:
<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp &q=domety&aq=f&oq=</a>
Der Teil nach „?“ in der Adresse sind die über GET gesendeten Anforderungsdaten. Das können wir in der Adressleiste deutlich erkennen Trennen Sie die einzelnen Daten durch das Symbol „&“. Offensichtlich ist diese Methode nicht für die Übertragung privater Daten geeignet. Da verschiedene Browser außerdem unterschiedliche Zeichenbeschränkungen für Adressen haben, können sie im Allgemeinen nur bis zu 1024 Zeichen erkennen. Wenn also große Datenmengen übertragen werden müssen, ist die GET-Methode nicht geeignet.
2).POST
Für die oben genannten Situationen, in denen die GET-Methode nicht geeignet ist, können Sie die Verwendung der POST-Methode in Betracht ziehen, da die Verwendung der POST-Methode dies zulässt Der Client stellt dem Server weitere Informationen zur Verfügung. Die POST-Methode kapselt die Anforderungsparameter in die HTTP-Anforderungsdaten und erscheint in Form eines Namens/Werts, der eine große Datenmenge übertragen kann. Auf diese Weise unterliegt die POST-Methode keiner Begrenzung der Größe der übertragenen Daten es wird nicht in der URL angezeigt. Am Beispiel der obigen Suchdomäne lautet das Format bei Verwendung der POST-Methode wie folgt:
POST /search HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r hl=zh-CN&source=hp&q=domety
3).HEAD
HEAD ist wie GET Nach Erhalt der HEAD-Anfrage gibt der Server jedoch nur den Antwortheader zurück und sendet nicht den Antwortinhalt. Wenn wir nur den Status einer bestimmten Seite anzeigen müssen, ist die Verwendung von HEAD sehr effizient, da der Seiteninhalt während des Übertragungsprozesses weggelassen wird.
2. Anforderungsheader
Der Anforderungsheader besteht aus Schlüsselwort-/Wertpaaren, einem Paar pro Zeile, und die Schlüsselwörter und Werte werden durch einen englischen Doppelpunkt getrennt. :" . Der Anforderungsheader informiert den Server über die Anfrage des Clients:
User-Agent: Der Browsertyp, der die Anfrage generiert hat.
Akzeptieren: Liste der vom Client erkannten Inhaltstypen.
Host: Der angeforderte Hostname, der es ermöglicht, dass sich mehrere Domänennamen unter derselben IP-Adresse befinden, also ein virtueller Host.
3. Leerzeile
Auf den letzten Anforderungsheader folgt eine Leerzeile, in der Wagenrücklauf- und Zeilenvorschubzeichen gesendet werden, um den Server darüber zu informieren, dass keine weiteren Anforderungen vorliegen Überschriften unten.
4. Anforderungsdaten
Die Anforderungsdaten werden nicht in der GET-Methode, sondern in der POST-Methode verwendet. Die POST-Methode eignet sich für Situationen, in denen Kunden ein Formular ausfüllen müssen. Die am häufigsten verwendeten Anforderungsheader im Zusammenhang mit Anforderungsdaten sind Content-Type und Content-Length.
HTTP-Nachricht
HTTP-Antwort besteht ebenfalls aus drei Teilen, nämlich: Statuszeile, Nachrichtenkopf und Antworttext.
Wie unten gezeigt, ist das Format der HTTP-Antwort dem Format der Anfrage sehr ähnlich:
<status-line> <headers> <blank line> [<response-body>]
Wie Sie sehen können, besteht der einzige wirkliche Unterschied in der Antwort darin Verwendung des Status in der ersten Zeile Information statt der Anforderung von Informationen. Die Statuszeile beschreibt die angeforderte Ressource durch Bereitstellung eines Statuscodes.
Das Statuszeilenformat ist wie folgt:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
常见状态代码、状态描述的说明如下。
下面给出一个HTTP响应报文例子
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122 <html> <head> <title>Wrox Homepage</title> </head> <body> <!-- body goes here --> </body> </html>
1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST提交:把提交的数据放置在是HTTP包的包体<request-body>中。上文示例中红色字体标明的就是实际的传输数据
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
2.传输数据的大小:
首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
因此对于GET提交时,传输数据就会受到URL长度的限制。
POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
3.安全性:
POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des HTTP-Nachrichtenformats. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!