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.
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
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表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
常见状态代码、状态描述的说明如下。
下面给出一个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)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。
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!