Cet article partage principalement avec vous l'explication détaillée des en-têtes et des corps de requête HTTP. L'étude de HTTP comprend principalement les quatre parties des bases de HTTP, les en-têtes et corps de requête HTTP, les en-têtes et codes d'état de réponse HTTP et le cache HTTP. .Pour HTTP En ce qui concerne l'expansion et l'extension, nous devons également comprendre et pratiquer les bases de HTTPS, de HTTP/2 et de WebSocket. Les points de connaissances de cette partie sont également résumés dans la revue de l'auteur de ma préparation au recrutement scolaire : du front-end Web à l'architecture d'application côté serveur.
Requête HTTP
Le message de requête HTTP est divisé en trois parties : ligne de requête, en-tête de requête et corps de requête. Le format est le suivant :
Les champs d'en-tête de message de requête typiques sont les suivants :
POST/GET http://download.microtool.de:80/somedata.exe Host: download.microtool.de Accept:*/* Pragma: no-cache Cache-Control: no-cache Referer: http://download.microtool.de/ User-Agent:Mozilla/4.04[en](Win95;I;Nav) Range:bytes=554554-
La ligne de requête (Request Line) est divisée en trois parties : méthode de requête, adresse de requête et protocole. et version, se terminant par CRLF(rn).
HTTP/1.1 définit 8 méthodes de requête : GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, TRACE. Les deux plus courantes sont GET et POST. S'il s'agit d'une interface RESTful, GET et POST, DELETE, METTRE.
Notez que seuls les trois verbes POST, PUT et PATCH contiendront le corps de la requête, tandis que les verbes GET, HEAD, DELETE, CONNECT, TRACE et OPTIONS contiendront le corps de la requête . Ne contient pas de corps de requête.
En-tête | Explication | Exemple |
---|---|---|
Accepter | Spécifiez les types de contenu que le client peut recevoir | Accepter : text/plain, text/html,application/json |
Accept-Charset | Le jeu d'encodage de caractères que le navigateur peut accepter. | Accept-Charset : iso-8859-5 |
Accept-Encoding | Spécifiez le type d'encodage de compression de contenu renvoyé par le serveur Web que le navigateur peut soutenir. | Accepter-Encodage : compresser, gzip |
Accepter-Langue | Accepter-Langue : en,zh | |
Vous pouvez demander un ou plusieurs champs de sous-plage de l'entité de la page Web | Accept-Ranges : octets | |
Certificat d'autorisation pour autorisation HTTP | Autorisation : Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== | |
Spécifiez le mécanisme de mise en cache suivi par requêtes et réponses | Cache-Control : no-cache | |
Indique si une connexion persistante est requise. (HTTP 1.1 utilise des connexions persistantes par défaut) | Connexion : fermer | |
Lorsqu'une requête HTTP est envoyée, les informations stockées sous le demandé le nom de domaine sera Toutes les valeurs des cookies sont envoyées ensemble au serveur Web. | Cookie : $Version=1 ; Skin=new ; | |
Content-Length | Longueur du contenu demandé | Content- Longueur : 348 |
Content-Type | Les informations MIME demandées correspondant à l'entité | Content-Type : application/x-www-form- urlencoded |
Date | La date et l'heure auxquelles la demande a été envoyée | Date : mar 15 novembre 2010 08:12:31 GMT |
Attendez-vous | Comportement spécifique du serveur demandé | Attendez-vous : 100-continuez |
De | E-mail de l'utilisateur qui a fait la demande | De : user@email.com |
Hôte | Précisez le nom de domaine et le numéro de port du serveur demandé | Hôte : www.zcmhi.com |
If-Match | Valable uniquement si le contenu de la demande correspond à l'entité | If -Match : "737060cd8c284d8af7ad3082f209582d" |
If-Modified-Since | Si la partie demandée est modifiée après le délai spécifié, la demande est réussie Si elle n'est pas modifiée. , un code 304 est renvoyé | If-Modified-Since : Sam 29 Oct 2010 19:43:31 GMT |
If-None-Match | Si le contenu n'a pas changé, renvoie le code 304, le paramètre est l'Etag précédemment envoyé par le serveur, et est comparé à l'Etag répondu par le serveur pour déterminer s'il a changé | If-None- Correspondance : "737060cd8c284d8af7ad3082f209582d" |
If-Range | Si l'entité n'a pas changé, le serveur envoie la partie manquante du client, sinon l'entité entière est envoyée.Les paramètres sont également Etag | If-Range: "737060cd8c284d8af7ad3082f209582d" |
If-Unmodified-Since | seulement si l'entité n'a pas été modifiée après l'heure spécifiée La demande est réussie | If-Unmodified-Since : samedi 29 octobre 2010 19:43:31 GMT |
Max-Forwards | Restreindre les informations via Time envoyé par les proxys et les passerelles | Max-Forwards : 10 : no-cache |
Proxy-Authorization | Certificat d'autorisation pour se connecter au proxy | Proxy-Autorisation : Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Plage | Ne demander qu'une partie de l'entité, préciser la plage | Plage : bytes=500-999 |
Référent | L'adresse de la page Web précédente, suivie de la page Web actuellement demandée, c'est-à-dire la source | Référent : http://www.zcmhi.com/archives... |
TE | Le codage de transfert que le client est prêt à accepter et demande au serveur d'accepter la queue ainsi que les informations d'en-tête | TE: trailers,deflate;q=0.5 |
Mise à niveau | Spécifiez un certain protocole de transport vers le serveur pour conversion (si pris en charge) | Mise à niveau : HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
User-Agent | Le contenu de User-Agent contient les informations de l'utilisateur qui a fait la demande | User-Agent : Mozilla/5.0 (Linux; X11) |
Via | Notifier l'adresse de la passerelle intermédiaire ou du serveur proxy, protocole de communication | Via : 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Attention | Informations d'avertissement sur l'entité de message | Avertissement : 199 Avertissement divers |
Request Body:请求体Types根据应用场景的不同,HTTP请求的请求体有三种不同的形式。 任意类型移动开发者常见的,请求体是任意类型,服务器不会解析请求体,请求体的处理需要自己解析,如 POST JSON时候就是这类。 application/jsonapplication/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。 JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。记得我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 JSON 序列化之后来提交的。不过当时我是把 JSON 字符串作为 val,仍然放在键值对里,以 x-www-form-urlencoded 方式提交。 Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串。例如下面这段代码: JSvar data = {'title':'test', 'sub' : [1,2,3]};$http.post(url, data).success(function(result) { ... }); Copier après la connexion 最终发送的请求是: BASHPOST http://www.example.com HTTP/1.1 Content-Type: application/json;charset=utf-8{"title":"test","sub":[1,2,3]} Copier après la connexion 这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好。但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 当然 AngularJS 也可以配置为使用 x-www-form-urlencoded 方式提交数据。如有需要,可以参考这篇文章。 text/xml我的博客之前提到过 XML-RPC(XML Remote Procedure Call)。它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的: HTMLPOST http://www.example.com HTTP/1.1 Content-Type: text/xml<?xml version="1.0"?><methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>41</i4></value> </param> </params></methodCall> Copier après la connexion XML-RPC 协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 服务等等。JavaScript 中,也有现成的库支持以这种方式进行数据交互,能很好的支持已有的 XML-RPC 服务。不过,我个人觉得 XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。 Chaîne de requête :application/x-www-form-urlencodedIl s'agit du moyen le plus courant de soumettre des données via POST. Le formulaire |