Maison > Article > interface Web > 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
Le protocole http est basé sur le protocole tcp/ip
Le nom complet du protocole http est Hypertext Transfer Protocol ( HTTP, protocole de transfert hypertexte)
protocole http version 1.0 1.1 2.0
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
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.
Ligne de requête
En-tête du message
Une ligne vierge
Contenu
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.
Accepter : indiquer au serveur quels fichiers je peux accepter les types Type MIME acceptés par le navigateur
Accept-Charset : encodage du jeu de caractères accepté par le navigateur
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
Accepter-Langage : Langue prise en charge par le navigateur
Hôte : Indique qui est l'hôte que je recherche
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".
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 :
Cookie : Il s'agit de la demande la plus importante. Une des informations d'en-tête
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.
Date : L'heure à laquelle le navigateur a envoyé la requête http.
Content-Length : Indique la longueur du corps du message de la demande.
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.
Ligne d'état
Plusieurs en-têtes de message
Une ligne vide
Contenu de l'entité
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 |
Location:让浏览器重新定位到 指定的 URL
Server:告诉浏览器 服务器的类型
Content-Encoding:服务端能够发送压缩编码类型
Content-Length: 服务器端发送的压缩数据的长度
Content-Langage:服务端发送的语言类型
Content-Type:服务端发送的类型及采用的编码方式
Last-Modified:服务端对该资源最后的修改(更新)时间
Refresh:服务端要求浏览器在指定的时间,刷新,然后访问指定的页面路径
Content-Disposition:attachmen;filename=aaa.zip 服务端要求客户端一下载文件的方式打开该文件,即告诉浏览器有文件需要下载
Transfer-Encoding:传送数据到客户端的方式
Set-Cookie:服务端发送到客户端的暂存数据
Cache-Control:告诉浏览器如何缓存页面数据
Expires:告诉浏览器如何缓存页面数据 参数 -1 不缓存
Pragma:告诉浏览器如何缓存页面数据
Connection:维护客户端和服务端的连接关系 是否保持连接
Date:服务端响应客户端的时间
// 指定该页面不缓存 ie浏览器内核response.setDateHeader("Expires",-1);// 兼容设置response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");
// 指定该页面缓存指定时间 ie浏览器内核response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000*24;
通用信息头指既能用于请求,又能用于响应的一些消息头
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!