Heim  >  Artikel  >  Detaillierte Erläuterung des HTTP-Nachrichtenformats

Detaillierte Erläuterung des HTTP-Nachrichtenformats

藏色散人
藏色散人Original
2019-06-06 14:13:2313779Durchsuche

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.

Detaillierte Erläuterung des HTTP-Nachrichtenformats

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

Wie Sie sehen können, enthält die Anforderungszeile der POST-Methode keine Datenzeichenfolgen und diese Daten werden gespeichert Im Abschnitt „Inhalt anfordern“ werden die einzelnen Daten ebenfalls durch das Symbol „&“ getrennt. Die POST-Methode wird hauptsächlich in Seitenformularen verwendet. Da POST auch die Funktion von GET vervollständigen kann, verwenden die meisten Leute beim Entwerfen von Formularen immer die POST-Methode. Tatsächlich ist dies ein Missverständnis. Die GET-Methode hat auch ihre eigenen Eigenschaften und Vorteile. Wir sollten je nach Situation entscheiden, ob wir GET oder POST verwenden möchten

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表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

  • 1xx:指示信息--表示请求已接收,继续处理。
  • 2xx:成功--表示请求已被成功接收、理解、接受。
  • 3xx:重定向--要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误--请求有语法错误或请求无法实现。
  • 5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。

  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

下面给出一个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>

关于HTTP请求GET和POST的区别

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist das ptf-Format?Nächster Artikel:Was ist das ptf-Format?