Maison Opération et maintenance exploitation et maintenance Linux Introduction et compréhension approfondie du protocole HTTP

Introduction et compréhension approfondie du protocole HTTP

Aug 23, 2017 pm 03:56 PM
http 应用 总结

Résume ma compréhension de certains contenus liés au protocole http que j'ai rencontré dans des scénarios de travail réels.

Introduction et compréhension approfondie du protocole HTTP

Demande et réponse

Format de demande

GET /api/index.json HTTP/1.1

Par exemple : Accepter : */*; User-Agent : Mozilla/4.0;……

[] Par exemple : id=1×tamp=xxxxxx

Format de réponse

Par exemple : Content-Type : application/json;......

[

Code de statut

Il existe près de 60 codes de statut http. J'enregistre principalement certains codes de statut courants générés. dans des circonstances anormales, nous le rencontrerons plus ou moins dans les applications quotidiennes, ce qui nous aide à comprendre et à découvrir les problèmes.

206 - Utilisé lors d'un téléchargement avec points d'arrêt. Le client a demandé une partie du contenu et le serveur lui a renvoyé avec succès cette partie du contenu. Ce statut est utilisé à ce moment-là.

301 - Saut permanent, l'adresse d'origine n'existe plus, et l'url pointe vers une autre adresse. Ceci est principalement lié aux moteurs de recherche et affecte le comportement de récupération du robot.

302 - Saut temporaire, le serveur renverra une nouvelle URL au client, et le client pourra continuer à accéder à cette URL pour obtenir du contenu.

304 - La ressource n'a pas changé. Le client peut utiliser le contenu mis en cache localement, ce qui est courant dans l'accès au contenu statique.

413 - L'entité de requête est trop grande. Une situation courante consiste à télécharger un fichier volumineux, mais à dépasser la limite du serveur (comme nginx). Ou l'en-tête de la requête ou le corps de la requête dépasse les paramètres du serveur back-end (tel que Tomcat) (par exemple, il y a trop de cookies sous le nom de domaine actuel, dépassant la limite de l'en-tête de la requête)

416 - lié à la reprise du point d'arrêt, demande du client La plage dépasse la taille du fichier sur le serveur.

500 - Erreur interne du serveur, impossible de renvoyer des résultats normaux. Par exemple, l’application la plus courante génère une exception de pointeur nul qui n’est pas gérée.

502 - Erreur de passerelle. Une situation courante est que le serveur backend proxy inverse (tel que resin ou Tomcat) n'est pas démarré.

503 - Service indisponible. Par exemple, la charge du serveur est trop élevée ou le serveur a arrêté de servir.

504 - Délai d'expiration de la passerelle. Par exemple, la durée de la requête dépasse le temps limite de réponse du serveur.

En-têtes

Les en-têtes HTTP sont divisés en deux catégories : l'en-tête de requête et l'en-tête de réponse. Voici quelques en-têtes que nous utilisons souvent.

1. Contrôle du cache

Dans les applications de sites Web Internet, les caches sont presque partout. Dans les services basés sur http, nous pouvons également contrôler certains contenus qui ne le sont pas. les modifications fréquentes sont mises en cache côté client, de sorte que le contenu mis en cache puisse être réutilisé lors de plusieurs visites, accélérant ainsi l'accès et améliorant l'expérience utilisateur. Le protocole http stipule certains en-têtes http pour le contrôle du cache :

Cache-Control(HTTP/1.1)/Pragma(HTTP/1.0) : indique si le client met en cache et combien de temps le temps de cache est long. La valeur par défaut est privée, ce qui signifie que le contenu est mis en cache dans l'espace privé de l'utilisateur. Par exemple : Cache-Control : max-age=86400, must-revalidate, cela indique au client que la ressource demandée est mise en cache pendant un jour (l'unité d'âge maximum est en secondes, temps relatif) et doit être revérifiée après l'expiration.

Expire : Spécifiez combien de temps le client (si aucune actualisation forcée n'est requise) peut lire directement le cache local sans envoyer de requête au serveur.

Remarque :

Priorité : Cache-Control > Expires ;

Description détaillée du paramètre : http://condor.depaul.edu/dmumaugh/readings/handouts/ SE435. /HTTP/node24.html

Les différents comportements des différents navigateurs (actualisation, retour, saisie dans la barre d'adresse, etc.) peuvent avoir des différences d'implémentation

Last-Modified/If- ; Modified -Since : Last-Modified est l'horodatage de la dernière modification de la ressource renvoyé par le serveur au client. De cette manière, le client apportera le paramètre If-Modified-Since pour vérifier si la ressource a été mise à jour lors de la prochaine requête. (comme l'actualisation forcée). Non En cas de mise à jour, le serveur renverra un code d'état 304 et le client accédera directement aux ressources mises en cache localement. À l’heure actuelle, il n’y a qu’une surcharge de requêtes et aucune surcharge de transmission réseau. Remarque : L'horodatage doit être l'heure moyenne de Greenwich (GMT), par exemple : Last-Modified : Sam, 19 Oct 2013 09:20:15 GMT

ETag/If-None-Match : ETag est basé sur le fichier. attributs L'identifiant de ressource généré via un certain algorithme est également utilisé pour déterminer si la ressource demandée par le client a été mise à jour. Si le serveur renvoie une valeur ETag au client, la prochaine fois que le client la demandera, il apportera le paramètre If-None-Match pour vérifier si la ressource est mise à jour. Si elle n'est pas mise à jour, un code d'état 304 sera renvoyé. . (L'effet est fondamentalement le même que Last-Modified)

Remarque :

ETag doit être calculé, ce qui est une consommation pour les serveurs avec des ressources informatiques limitées, donc certains sites Web n'utilisent pas ETag directement;

Si le serveur est derrière un équilibreur de charge, les requêtes pour la même ressource peuvent être distribuées sur différentes machines backend. Étant donné que le calcul de l'ETag dépend des attributs des fichiers, les fichiers ayant le même contenu sur différentes machines peuvent générer des ETags différents, ce qui peut. Échec de la vérification ETag pour les fichiers dont le contenu d'origine n'a pas changé. Il existe deux solutions ici : l'une est que le calcul de l'etag ne dépend pas de la machine locale, comme le calcul direct de la valeur md5 du contenu du fichier ; l'autre consiste à distribuer la même requête URL à la même machine back-end lors du chargement ; balancier.

Dans notre scénario commercial actuel, la mise en cache http a de grandes utilisations :

Utilisez pleinement les ressources du client, telles que certains fichiers statiques auxquels le client doit accéder fréquemment. comme le LOGO, les images publicitaires, etc., peuvent être mis en cache localement sur le client. Cela peut réduire les requêtes réseau, accélérer l'affichage des clients et réduire la pression sur les requêtes du serveur.

Lorsque certains de nos contenus statiques, tels que les actualités, les blogs, etc., sont explorés par les robots des moteurs de recherche, en contrôlant les paramètres du cache, nous pouvons réduire la fréquence d'exploration du robot et réduire le gaspillage inutile de ressources.

Si nos ressources statiques utilisent CDN, la configuration du cache http peut enregistrer un fichier sur le nœud CDN, réduisant ainsi le nombre de retours CDN aux origines, le délai du réseau et la pression du serveur d'origine.

2. Demande de point d'arrêt

Accept-Ranges : lorsque le serveur prend en charge le téléchargement du point d'arrêt, il renvoie cet en-tête de réponse au client. Lorsque le client le sait, il peut envoyer une demande de point d'arrêt. .

Content-Length : La longueur des informations de réponse, indiquant au client la quantité de données renvoyées par la requête en cours. Il convient de noter ici que lors de la soumission d'une demande à l'aide de la méthode head, aucune donnée spécifique ne sera renvoyée, mais Content-Length renverra la taille des données complètes.

Range/Content-Range : le client soumet un en-tête nommé Range lors de la demande, indiquant au serveur quelle partie des données il souhaite demander. Par exemple : Range: bytes=0-1023 signifie demander les octets 0 à 1023. Ensuite, le serveur renvoie le contenu de ces 1024 octets au client, et Content-Range sera inclus dans l'en-tête de réponse. C'est-à-dire : Content-Range : octets 0-1023/4096, ce 4096 est la taille totale du fichier. La requête suivante du client peut commencer à partir du 1024ème octet, plage : bytes=1024-xxxx

 3. Encodage

Accept-Encoding/Content-Encoding : le premier est pris en charge par le client Message reçu type de codage. La valeur par défaut est l'identité, les valeurs facultatives incluent gzip, compress, etc. Ce dernier est le type de codage de contenu des informations de réponse côté serveur, et la compression est couramment utilisée. Les avantages de la compression sont évidents : elle peut réduire considérablement le coût de la transmission réseau. Par rapport à la consommation CPU provoquée par la compression côté serveur, la réduction de la transmission réseau est évidemment plus pratique. Formes courantes : Content-Encoding : gzip, deflate, compress. Habituellement, nous pouvons compresser et transmettre les résultats de réponse tels que html, js, css, xml et json.

Transfer-Encoding : en-tête de réponse. Le type de codage de transfert du message de réponse spécifie la forme de transmission réseau. Généralement, il se présente sous la forme suivante : Transfer-Encoding : chunked. Lorsque le serveur génère du contenu dynamique et ne connaît pas la longueur spécifique des informations de réponse, il peut le transmettre via ce bloc désigné et renvoyer autant de données qu'il traite, il n'est donc pas nécessaire d'attendre que les données soient prêtes et de les renvoyer. tout à coup. Combiné avec le codage de contenu ci-dessus, tel que gzip, il peut être compressé en blocs et transmis. De plus, veuillez noter que lorsque vous utilisez cet encodage pour transmettre, nous ne pouvons pas voir la longueur du contenu car le contenu n'a pas été entièrement généré.

 4.Autres

X-Forward-For : en-tête de requête Utilisé pour identifier la véritable IP de l'utilisateur, notamment lors de l'accès au serveur via un proxy (forward ou reverse) ou lorsque le serveur est en mode proxy. sous charge Égalisez la situation derrière l'appareil. Format : X-forward-For : client,proxy1,proxy2,...L'adresse IP la plus à gauche est la plus proche du client.

User-Agent : en-tête de requête. L'en-tête de requête utilisé par le serveur pour identifier les informations de base du client. Généralement, cela est utile pour identifier les robots de recherche. Dans certains scénarios, cela peut également être utilisé pour effectuer certaines statistiques client.

Referer : en-tête de requête. Lorsque le client accède au serveur, ce Referer précise la source de la requête, par exemple le site Web à partir duquel il est lié. Nous l'utilisons souvent dans certaines statistiques. De plus, une autre utilisation importante consiste à filtrer les sources de requêtes illégales dans des scénarios qui nécessitent un anti-hotlinking des ressources (cependant, ce référent peut être falsifié par le client).

Location : en-tête de réponse. Cet en-tête Location sera inclus dans l'en-tête de réponse du code d'état 301/302 pour indiquer au client d'utiliser la nouvelle adresse pour accéder aux ressources requises.

Connexion : en-tête de requête/réponse. Dans http/1.1, le client et le serveur conservent la connexion par défaut, c'est-à-dire Connexion : conserver la connexion. Si l'une des parties ne souhaite pas conserver la connexion, vous pouvez le faire. put this La valeur est définie sur close. Par défaut, le client et le serveur maintiendront une longue connexion, afin que le client puisse utiliser cette connexion pour envoyer plusieurs requêtes http, réduisant ainsi la consommation causée par la création fréquente de connexions. Pour ce paramètre, davantage de paramètres peuvent être requis côté serveur, tels que le temps de maintien de la connexion et certains paramètres réseau du noyau du serveur (pour TCP).

Session et Cookie

Les requêtes HTTP sont des requêtes sans état, mais dans nos applications Internet, il est souvent nécessaire d'identifier les informations sur l'état de l'utilisateur pour effectuer certaines opérations interactives. Par exemple, l'authentification de l'utilisateur doit enregistrer l'état de connexion de l'utilisateur et les applications de panier d'achat doivent se souvenir de l'utilisateur. sélections. Les produits, les applications publicitaires doivent enregistrer le comportement de navigation historique des utilisateurs, etc. La session et les cookies seront utilisés ici.

session : fait référence à l'état d'interaction entre le client et le serveur pendant le processus de requête-réponse http. Ces informations sont stockées côté serveur, comme la mémoire, la base de données, etc. Chaque session possède un identifiant unique, qui est généré par le serveur. Cet identifiant doit également être enregistré sur le client, afin que le client puisse apporter cet identifiant lors de la prochaine requête pour permettre au serveur de déterminer le statut du client.

Support client pour les sessions :

Enregistrez l'identifiant de session via des cookies et envoyez-le au serveur lors de la demande.

Communiquez avec le serveur en portant l'identifiant de session dans les paramètres de l'url.

Communiquez avec le serveur en portant l'identifiant de session dans le champ caché du formulaire.

Problème de partage de session :

Dans les applications distribuées, notre serveur http est généralement placé derrière un proxy inverse ou un périphérique d'équilibrage de charge, qui sera confronté à un problème de partage de session. C'est-à-dire que plusieurs requêtes du même utilisateur peuvent être distribuées sur plusieurs machines différentes. Si nous enregistrons la session dans la mémoire locale de la machine, nous ne pouvons pas partager la session de l'utilisateur entre plusieurs machines. De manière générale, on peut résoudre ce problème de deux manières :

Stocker la session dans une mémoire distribuée (ex : memcached) ou un stockage centralisé (ex : base de données).

Distribuez les requêtes du même utilisateur sur la même machine sur le proxy inverse ou le périphérique d'équilibrage de charge (le problème de la redistribution des requêtes après la panne de la machine doit être traité ici).

Cookie : conserve des informations dynamiques sur le client. Chaque contenu de cookie appartient à un domaine (domaine) et à un chemin (chemin) spécifiques. Pour des raisons de sécurité, les cookies de différents domaines ou chemins ne peuvent pas être partagés.

Cookie de session : Aucun délai d'expiration n'est précisé, il est stocké en mémoire et expirera après la fermeture du navigateur.

Cookie persistant : précise le délai d'expiration et est enregistré localement dans le navigateur.

Pour plus de détails, veuillez vous référer à : http://en.wikipedia.org/wiki/HTTP_cookie

Il convient de noter que les cookies auront certains problèmes de sécurité.

Ici, je viens de résumer ma compréhension de certains contenus liés au protocole http que j'ai rencontré au travail. Il y a encore beaucoup de choses à explorer dans le protocole http, et nous devons également continuer à explorer et à explorer. comprendre le protocole http. Cela apportera une grande commodité à nos applications de développement.

Enfin, je recommande deux outils de débogage http très NB : fiddler (windows) et charles (mac) ont une fonction proxy http. Pour les applications http qui ne sont pas basées sur un navigateur (comme les applications mobiles), vous pouvez utiliser. ces deux-là Un outil pour surveiller les requêtes http.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment annuler la suppression de l'écran d'accueil sur iPhone Comment annuler la suppression de l'écran d'accueil sur iPhone Apr 17, 2024 pm 07:37 PM

Vous avez supprimé quelque chose d'important de votre écran d'accueil et vous essayez de le récupérer ? Vous pouvez remettre les icônes d’applications à l’écran de différentes manières. Nous avons discuté de toutes les méthodes que vous pouvez suivre et remettre l'icône de l'application sur l'écran d'accueil. Comment annuler la suppression de l'écran d'accueil sur iPhone Comme nous l'avons mentionné précédemment, il existe plusieurs façons de restaurer cette modification sur iPhone. Méthode 1 – Remplacer l'icône de l'application dans la bibliothèque d'applications Vous pouvez placer une icône d'application sur votre écran d'accueil directement à partir de la bibliothèque d'applications. Étape 1 – Faites glisser votre doigt sur le côté pour trouver toutes les applications de la bibliothèque d'applications. Étape 2 – Recherchez l'icône de l'application que vous avez supprimée précédemment. Étape 3 – Faites simplement glisser l'icône de l'application de la bibliothèque principale vers le bon emplacement sur l'écran d'accueil. Voici le schéma d'application

Le rôle et l'application pratique des symboles fléchés en PHP Le rôle et l'application pratique des symboles fléchés en PHP Mar 22, 2024 am 11:30 AM

Le rôle et l'application pratique des symboles fléchés en PHP En PHP, le symbole fléché (->) est généralement utilisé pour accéder aux propriétés et méthodes des objets. Les objets sont l'un des concepts de base de la programmation orientée objet (POO) en PHP. Dans le développement actuel, les symboles fléchés jouent un rôle important dans le fonctionnement des objets. Cet article présentera le rôle et l'application pratique des symboles fléchés et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 1. Le rôle du symbole flèche pour accéder aux propriétés d'un objet. Le symbole flèche peut être utilisé pour accéder aux propriétés d'un objet. Quand on instancie une paire

Du débutant au compétent : explorez différents scénarios d'application de la commande Linux tee Du débutant au compétent : explorez différents scénarios d'application de la commande Linux tee Mar 20, 2024 am 10:00 AM

La commande Linuxtee est un outil de ligne de commande très utile qui peut écrire la sortie dans un fichier ou envoyer la sortie à une autre commande sans affecter la sortie existante. Dans cet article, nous explorerons en profondeur les différents scénarios d'application de la commande Linuxtee, du débutant au compétent. 1. Utilisation de base Tout d'abord, jetons un coup d'œil à l'utilisation de base de la commande tee. La syntaxe de la commande tee est la suivante : tee[OPTION]...[FILE]...Cette commande lira les données de l'entrée standard et enregistrera les données dans

Découvrez les avantages et les scénarios d'application du langage Go Découvrez les avantages et les scénarios d'application du langage Go Mar 27, 2024 pm 03:48 PM

Le langage Go est un langage de programmation open source développé par Google et lancé pour la première fois en 2007. Il est conçu pour être un langage simple, facile à apprendre, efficace et hautement simultané, et est favorisé par de plus en plus de développeurs. Cet article explorera les avantages du langage Go, présentera quelques scénarios d'application adaptés au langage Go et donnera des exemples de code spécifiques. Avantages : Forte concurrence : le langage Go prend en charge de manière intégrée les threads-goroutine légers, qui peuvent facilement implémenter une programmation simultanée. Goroutin peut être démarré en utilisant le mot-clé go

Comment implémenter le streaming HTTP en utilisant C++ ? Comment implémenter le streaming HTTP en utilisant C++ ? May 31, 2024 am 11:06 AM

Comment implémenter le streaming HTTP en C++ ? Créez un socket de flux SSL à l'aide de Boost.Asio et de la bibliothèque client asiohttps. Connectez-vous au serveur et envoyez une requête HTTP. Recevez les en-têtes de réponse HTTP et imprimez-les. Reçoit le corps de la réponse HTTP et l'imprime.

La large application de Linux dans le domaine du cloud computing La large application de Linux dans le domaine du cloud computing Mar 20, 2024 pm 04:51 PM

La large application de Linux dans le domaine du cloud computing Avec le développement et la vulgarisation continus de la technologie du cloud computing, Linux, en tant que système d'exploitation open source, joue un rôle important dans le domaine du cloud computing. En raison de leur stabilité, de leur sécurité et de leur flexibilité, les systèmes Linux sont largement utilisés dans diverses plates-formes et services de cloud computing, fournissant une base solide pour le développement de la technologie du cloud computing. Cet article présentera le large éventail d'applications de Linux dans le domaine du cloud computing et donnera des exemples de code spécifiques. 1. Technologie de virtualisation d'applications de Linux dans la plate-forme de cloud computing Technologie de virtualisation

Comprendre les horodatages MySQL : fonctions, fonctionnalités et scénarios d'application Comprendre les horodatages MySQL : fonctions, fonctionnalités et scénarios d'application Mar 15, 2024 pm 04:36 PM

L'horodatage MySQL est un type de données très important, qui peut stocker la date, l'heure ou la date plus l'heure. Dans le processus de développement actuel, l'utilisation rationnelle des horodatages peut améliorer l'efficacité des opérations de base de données et faciliter les requêtes et les calculs liés au temps. Cet article abordera les fonctions, les fonctionnalités et les scénarios d'application des horodatages MySQL, et les expliquera avec des exemples de code spécifiques. 1. Fonctions et caractéristiques des horodatages MySQL Il existe deux types d'horodatages dans MySQL, l'un est TIMESTAMP

Tutoriel Apple sur la façon de fermer les applications en cours d'exécution Tutoriel Apple sur la façon de fermer les applications en cours d'exécution Mar 22, 2024 pm 10:00 PM

1. Nous cliquons d’abord sur le petit point blanc. 2. Cliquez sur l'appareil. 3. Cliquez sur Plus. 4. Cliquez sur Sélecteur d'applications. 5. Fermez l'arrière-plan de l'application.

See all articles