Maison >interface Web >js tutoriel >Analyse approfondie du protocole HTTP

Analyse approfondie du protocole HTTP

一个新手
一个新手original
2017-09-21 10:36:402374parcourir

Analyse approfondie du protocole HTTP

http Introductionhttp La partie requête de http Structure de base de la demandeLigne de demandeExplication détaillée En-tête de requête HTTPHttp Détails de la réponsehttp Structure de base de la réponseLigne d'étathttp Explication détaillée des en-têtes de réponseExpires, Pragma, Cache-Control Définir pour ne pas mettre en cacheExpire, Pragma, Cache-Control Paramètres Spécifier l'heure du cacheHTTP Détails de la demande - En-tête général

introduction http

  1. Le protocole http est basé sur le protocole tcp/ip

  2. Le nom complet du protocole http est Hypertext Transfer Protocol ( HTTP, protocole de transfert hypertexte)

  3. protocole http version 1.0 1.1 2.0

  4. http 1.0 devient une connexion courte, http 1.1 est appelé une connexion longue

    La soi-disant longue et courte fait référence à la connexion longue durée 1.1 30s. La connexion courte est déconnectée immédiatement après l'envoi des données

  5. .
  6. Http définit différentes méthodes pour interagir avec le serveur. Il existe 4 méthodes les plus basiques, à savoir GET, POST, PUT et DELETE. Le nom complet de l'URL est un descripteur de ressource. On peut y penser de cette façon : une adresse URL, qui sert à décrire une ressource sur le réseau, et GET, POST, PUT et DELETE en HTTP correspondent à la vérification et à la modification de cette ressource. . Ajoutez et supprimez 4 opérations. À ce stade, tout le monde devrait avoir une compréhension générale. GET est généralement utilisé pour obtenir/interroger des informations sur les ressources, tandis que POST est généralement utilisé pour mettre à jour les informations sur les ressources.

La partie requête de http

Structure de base de la requête http

Ligne de requête

En-tête du message

Une ligne vierge

Contenu

Ligne de requête

Les méthodes de requête sont : publier, obtenir, options, supprimer, tracer, mettre

Ceux couramment utilisés sont : poster, get

La différence entre poster et get :

GET utilise une URL ou un cookie pour transmettre les paramètres. Et POST met les données dans BODY.

L'URL GET a une limite de longueur et les données POST peuvent être très volumineuses.

POST est plus sûr que GET car les données ne sont pas visibles dans la barre d'adresse.

Explication des en-têtes de requête HTTP
  1. Accepter : indiquer au serveur quels fichiers je peux accepter les types Type MIME acceptés par le navigateur

  2. Accept-Charset : encodage du jeu de caractères accepté par le navigateur

  3. Accept-Encoding : Peut accepter des données compressées dans un certain format tel que : gzip, compress. Méthode d'encodage des données que le navigateur peut décoder

  4. Accepter-Langage : Langue prise en charge par le navigateur

  5. Hôte : Indique qui est l'hôte que je recherche

  6. If-Wodified-Since : Indique au serveur s'il y a un fichier à demander dans le cache local qui contient l'heure du fichier demandé // Le serveur reçoit cette requête et compare l'heure pour déterminer si le fichier demandé par le navigateur a modifié. Si les modifications enverront un nouveau fichier au navigateur. Les données ne seront pas renvoyées sans modifications. //Remarque : Ce n'est que si le contenu demandé a été modifié après la date spécifiée qu'il sera renvoyé, sinon 304"Non sera renvoyé Réponse "modifiée".

  7. Référent : indiquez au serveur d'où je viens. Cet en-tête de message est souvent utilisé pour empêcher les hotlinking. Compréhension personnelle de la manière d'empêcher le hotlinking :

    Hotlinking : le hotlinking signifie que le fournisseur de services lui-même ne fournit pas de services. Contenu , en contournant d'autres interfaces utilisateur bénéfiques (telles que les publicités) par des moyens techniques, en fournissant directement le contenu des services d'autres fournisseurs de services aux utilisateurs finaux sur leurs propres sites Web, en fraudant les taux de navigation et de clics des utilisateurs finaux. ressources ou fournissent peu de ressources, et le véritable fournisseur de services n'obtient aucun avantage location referer.startWith("internal path");

    .

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{        // 防止乱码      response.setContentType("text/html;charset=utf-8");        // 获取输出流      PrintWriter out = response.getWriter();        // 获取用户浏览器 Referer      String referer = request.getHeader("Referer");      if(referer == null || referer.startsWith("http://localhost:8080/本地内部用户web应用路径")){          response.sendRedirect("其他非真正资源网页");          return;      }else{                }      // 内部资源文件        。。。。。。。。。。。  }

    User-Agent : Indique au serveur, au noyau du navigateur :

  8. Cookie : Il s'agit de la demande la plus importante. Une des informations d'en-tête

  9. Connexion : indique. si une connexion persistante est requise. Si le servlet voit que la valeur ici est "Keep-Alive", ou si vous voyez que la requête utilise HTTP 1.1 (HTTP 1.1 utilise des connexions persistantes par défaut), il peut profiter des connexions persistantes et réduire considérablement le temps de téléchargement lorsque la page contient plusieurs éléments (tels que des applets, des images). Pour y parvenir, le servlet doit envoyer un en-tête Content-Length dans la réponse. Le moyen le plus simple d'y parvenir est de : écrire d'abord le contenu. ByteArrayOutputStream, puis calcule sa taille avant d'écrire le contenu.

  10. Date : L'heure à laquelle le navigateur a envoyé la requête http.

  11. Content-Length : Indique la longueur du corps du message de la demande.

  12. UA-Pixels, UA-Color, UA-OS, UA-CPU : Envoyés par certaines versions du navigateur IE Non standard en-têtes de requête indiquant la taille de l’écran, la profondeur des couleurs, le système d’exploitation et le type de processeur.

Détails de la réponse HTTP

Structure de base de la réponse http

Ligne d'état

Plusieurs en-têtes de message

Une ligne vide

Contenu de l'entité

Ligne d'état

Format : http numéro de version code d'état description du motif719f572dc95af346278bdd6251cfc5d3

Exemple : HTTP/1.1 200 OK

Le code d'état est utilisé pour indiquer le résultat du traitement de la demande par le serveur. Il s'agit d'un nombre décimal tridimensionnel. Les codes d'état de réponse sont divisés en 5 catégories.

状态码 含义
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 表示成功接收请求并已完成整个处理过程 。 常用200
300~399 为完成请求,客户端需进一步细化请求,例如:请求的资源已经移动一个新地址,常用302、307
400~499 客户端的请求有错误。常用 404
500~599 服务器端出现错误, 常用 500

http 响应消息头详解
  1. Location:让浏览器重新定位到 指定的 URL

  2. Server:告诉浏览器 服务器的类型

  3. Content-Encoding:服务端能够发送压缩编码类型

  4. Content-Length: 服务器端发送的压缩数据的长度

  5. Content-Langage:服务端发送的语言类型

  6. Content-Type:服务端发送的类型及采用的编码方式

  7. Last-Modified:服务端对该资源最后的修改(更新)时间

  8. Refresh:服务端要求浏览器在指定的时间,刷新,然后访问指定的页面路径

  9. Content-Disposition:attachmen;filename=aaa.zip 服务端要求客户端一下载文件的方式打开该文件,即告诉浏览器有文件需要下载

  10. Transfer-Encoding:传送数据到客户端的方式

  11. Set-Cookie:服务端发送到客户端的暂存数据

  12. Cache-Control:告诉浏览器如何缓存页面数据

  13. Expires:告诉浏览器如何缓存页面数据 参数 -1 不缓存

  14. Pragma:告诉浏览器如何缓存页面数据

  15. Connection:维护客户端和服务端的连接关系 是否保持连接

  16. Date:服务端响应客户端的时间

Expires、Pragma、Cache-Control 设置不缓存
// 指定该页面不缓存   ie浏览器内核response.setDateHeader("Expires",-1);// 兼容设置response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");

Expires、Pragma、Cache-Control 设置 指定缓存时间
// 指定该页面缓存指定时间   ie浏览器内核response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000*24;

HTTP 请求的细节————通用信息头

通用信息头指既能用于请求,又能用于响应的一些消息头

Cache-Control:no-cache

Pragma:no-cache

Connection:close/Keep-Alive

Date:Tue,。。。

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