Maison  >  Article  >  Explication détaillée du format de message http

Explication détaillée du format de message http

藏色散人
藏色散人original
2019-06-06 14:13:2313778parcourir

Les messages HTTP sont orientés texte. Chaque champ du message est une chaîne de codes ASCII et la longueur de chaque champ est incertaine. HTTP comporte deux types de messages : les messages de demande et les messages de réponse.

Explication détaillée du format de message http

Message de requête HTTP

Un message de requête HTTP se compose d'une ligne de requête et d'un en-tête. Il se compose de quatre parties : , une ligne vide et données de requête. La figure suivante montre le format général du message de requête.

ou

<request-line>
<headers>
<blank line>
[<request-body>

1. En-tête de requête

La ligne de requête se compose d'un champ de méthode de requête et d'un champ URL. et HTTP Le champ de version du protocole se compose de trois champs séparés par des espaces. Par exemple, GET /index.html HTTP/1.1.

Les méthodes de requête du protocole HTTP incluent GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE et CONNECT.

Les plus courantes sont les suivantes :

1).GET

La méthode de requête la plus courante, lorsque le client souhaite demander au serveur Lors de la lecture d'un document, lorsque vous cliquez sur un lien sur la page Web ou que vous parcourez la page Web en saisissant l'URL dans la barre d'adresse du navigateur, la méthode GET est utilisée. La méthode GET nécessite que le serveur place la ressource localisée par l'URL dans la partie données du message de réponse et la renvoie au client. Lors de l'utilisation de la méthode GET, les paramètres de requête et les valeurs correspondantes sont ajoutés à l'URL. Un point d'interrogation ("?") est utilisé pour représenter la fin de l'URL et le début des paramètres de requête. les paramètres sont limités. Par exemple, /index.jsp?id=100&op=bind, les données transmises via GET sont directement représentées dans l'adresse, nous pouvons donc envoyer le résultat de la demande à nos amis sous la forme d'un lien. Prenons l'exemple de la recherche Domety avec Google. Le format de la requête est le suivant :

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

Comme vous pouvez le constater, les requêtes GET n'incluent généralement pas la partie "contenu de la requête", et les données de la requête sont exprimées dans la requête. ligne sous forme d'adresse. Le lien d'adresse est le suivant :


<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>

La partie après "?" dans l'adresse correspond aux données de la demande envoyées via GET. Nous pouvons clairement voir dans la barre d'adresse qu'entre. chaque donnée Séparez-les par le symbole "&". Évidemment, cette méthode n’est pas adaptée à la transmission de données privées. De plus, étant donné que les différents navigateurs ont des restrictions de caractères différentes sur les adresses, ils ne peuvent généralement reconnaître que jusqu'à 1 024 caractères. Par conséquent, si une grande quantité de données doit être transmise, la méthode GET n'est pas adaptée.

2).POST

Pour les situations mentionnées ci-dessus où la méthode GET ne convient pas, vous pouvez envisager d'utiliser la méthode POST, car l'utilisation de la méthode POST permet le client au serveur fournit plus d'informations. La méthode POST encapsule les paramètres de la requête dans les données de la requête HTTP et apparaît sous forme de nom/valeur, qui peut transmettre une grande quantité de données. De cette manière, la méthode POST n'a aucune limite sur la taille des données transmises, et. il ne sera pas affiché dans l'URL. En prenant comme exemple la méthode de recherche ci-dessus, si la méthode POST est utilisée, le format est le suivant :

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

Comme vous pouvez le voir, la ligne de requête de la méthode POST ne contient pas de chaînes de données et ces données sont enregistrées dans la section "Demander du contenu". Chaque donnée est également séparée par le symbole "&". La méthode POST est principalement utilisée dans les formulaires de page. Étant donné que POST peut également compléter la fonction GET, la plupart des gens utilisent toujours la méthode POST lors de la conception de formulaires. En fait, c'est un malentendu. La méthode GET a également ses propres caractéristiques et avantages. Nous devons choisir d'utiliser GET ou POST selon différentes situations

3).HEAD

HEAD est comme GET. , Cependant, après avoir reçu la requête HEAD, le serveur renvoie uniquement l'en-tête de réponse et n'envoie pas le contenu de la réponse. Lorsque nous avons uniquement besoin de visualiser l'état d'une certaine page, l'utilisation de HEAD est très efficace car le contenu de la page est omis lors du processus de transmission.

2. En-tête de requête

L'en-tête de requête se compose de paires mot-clé/valeur, une paire par ligne, et les mots-clés et les valeurs sont séparés par des deux-points anglais " :" . L'en-tête de requête informe le serveur de la requête du client. Les en-têtes de requête typiques sont :

User-Agent : le type de navigateur qui a généré la requête.

Accepter : Liste des types de contenus reconnus par le client.

Hôte : Le nom d'hôte demandé, permettant à plusieurs noms de domaine d'être à la même adresse IP, c'est-à-dire un hôte virtuel.

3. Ligne vide

Le dernier en-tête de requête est suivi d'une ligne vide, envoyant des caractères de retour chariot et de saut de ligne pour informer le serveur qu'il n'y a plus de requête. en-têtes ci-dessous.

4. Données de requête

Les données de requête ne sont pas utilisées dans la méthode GET, mais dans la méthode POST. La méthode POST convient aux situations où les clients doivent remplir un formulaire. Les en-têtes de requête les plus couramment utilisés liés aux données de requête sont Content-Type et Content-Length.

Message HTTP

La réponse HTTP se compose également de trois parties, à savoir : la ligne d'état, l'en-tête du message et le corps de la réponse.

Comme indiqué ci-dessous, le format de la réponse HTTP est très similaire au format de la requête :

<status-line>
<headers>
<blank line>
[<response-body>]

Comme vous pouvez le constater, la seule vraie différence dans la réponse est le utilisation du statut dans la première ligne Informations au lieu de demander des informations. La ligne d'état décrit la ressource demandée en fournissant un code d'état.

Le format de la ligne d'état est le suivant :

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)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Qu'est-ce que le format ptfArticle suivant:Qu'est-ce que le format ptf