Habituellement, les messages HTTP incluent des messages de requête du client vers le serveur et des messages de réponse du serveur vers le client. Les deux types de messages se composent d'une ligne de début, d'un ou plusieurs champs d'en-tête, d'une ligne vide juste pour terminer les champs d'en-tête et d'un corps de message facultatif. Le champ d'en-tête HTTP comprend quatre parties : en-tête général, en-tête de requête, en-tête de réponse et en-tête d'entité. Chaque champ d'en-tête se compose d'un nom de domaine, de deux points (:) et d'une valeur de domaine. Les noms de domaine ne sont pas sensibles à la casse. N'importe quel nombre d'espaces peut être ajouté avant que la valeur du champ puisse être étendue sur plusieurs lignes, en utilisant au moins un espace ou une tabulation au début de chaque ligne.
Champ d'en-tête général (en-tête général)
Le champ d'en-tête général contient des champs d'en-tête pris en charge à la fois par les messages de demande et de réponse, fournissant Informations les plus élémentaires liées au message, le champ d'en-tête commun contient :
Connexion : permet au client et au serveur de spécifier les options liées à la connexion requête/réponse.
Date : indiquez la date et l'heure pour indiquer la date à laquelle le message a été créé.
MIME-Version : Donne la version MIME utilisée par l'expéditeur.
Remorque : si le paquet utilise un codage de transfert fragmenté, vous pouvez utiliser cet en-tête pour répertorier l'ensemble des en-têtes situés dans la partie de fin du paquet.
Transfer-Encoding : informe le destinataire de la méthode de codage utilisée pour le message afin de garantir une transmission fiable du message.
Mise à niveau : donne la nouvelle version et le nouveau protocole que l'expéditeur souhaitera peut-être "mettre à niveau" pour utiliser.
Via : affiche les nœuds intermédiaires par lesquels passe le message.
L'extension du champ d'en-tête général nécessite que les deux parties communicantes prennent en charge cette extension. S'il existe un champ d'en-tête général non pris en charge, il sera généralement traité comme un champ d'en-tête d'entité. Ce qui suit est une brève introduction à plusieurs champs d'en-tête courants utilisés dans les messages UPnP.
Champ d'en-tête Cache-Control
Cache-Control spécifie le mécanisme de mise en cache suivi des requêtes et des réponses. La définition de Cache-Control dans un message de demande ou un message de réponse ne modifie pas le processus de mise en cache pendant le traitement d'un autre message.
Les directives de cache lors de la demande incluent no-cache, no-store, max-age, max-stale, min-fresh et only-if-cached.
Les instructions contenues dans le message de réponse incluent public, privé, sans cache, sans magasin, sans transformation, revalidation obligatoire, revalidation par proxy et âge maximum.
La signification des instructions dans chaque message est la suivante :
Public indique que la réponse peut être mise en cache par n'importe quelle zone de cache.
Privé indique que tout ou partie du message de réponse d'un seul utilisateur ne peut pas être traité par le cache partagé. Cela permet au serveur de décrire uniquement une réponse partielle d'un utilisateur qui n'est pas valide pour les demandes des autres utilisateurs.
no-cache indique que le message de demande ou de réponse ne peut pas être mis en cache.
no-store est utilisé pour empêcher la divulgation involontaire d'informations importantes. L'envoyer dans le message de demande entraînera l'utilisation de la mise en cache par les messages de demande et de réponse.
max-age indique que le client peut recevoir des réponses avec une durée de vie ne dépassant pas le temps spécifié en secondes.
min-fresh indique que le client peut recevoir des réponses avec un temps de réponse inférieur à l'heure actuelle plus l'heure spécifiée.
max-stale indique que le client peut recevoir des messages de réponse au-delà du délai d'attente. Si vous spécifiez une valeur pour les messages périmés au maximum, le client peut recevoir des messages de réponse qui dépassent la valeur spécifiée du délai d'expiration.
Recommandations associées : "Tutoriel vidéo Python"
Champ d'en-tête de date
Le champ d'en-tête de date indique l'heure à laquelle le message est envoyé. Le format de description de l'heure est défini par la rfc822. Par exemple, Date :Lun,31Dec200104:25:57GMT. L'heure décrite par Date représente l'heure standard mondiale. Pour la convertir en heure locale, vous devez connaître le fuseau horaire de l'utilisateur.
Champ d'en-tête Pragma
Le champ d'en-tête Pragma est utilisé pour contenir des instructions spécifiques à l'implémentation, la plus couramment utilisée est Pragma:no-cache. Dans le protocole HTTP/1.1, sa signification est la même que Cache-Control:no-cache.
Message de requête
La première ligne du message de requête est au format suivant :
MethodSPRequest-URISPHTTP-VersionCRLFMethod représente la méthode complétée pour le Request-URI, ce champ est sensible à la casse et inclut OPTIONS, GET, HEAD, POST, PUT, DELETE et TRACE.
Les méthodes GET et HEAD doivent être prises en charge par tous les serveurs WEB courants, la mise en œuvre de toutes les autres méthodes est facultative.
La méthode GET récupère les informations identifiées par Request-URI.
La méthode HEAD récupère également les informations identifiées par Request-URI, mais elle ne peut pas renvoyer le corps du message lors de la réponse.
La méthode POST peut demander au serveur de recevoir les informations sur l'entité contenues dans la requête, et peut être utilisée pour soumettre des formulaires et envoyer des messages à des groupes de discussion, des BBS, des groupes de messagerie et des bases de données.
SP signifie espace. Request-URI suit le format URI. Lorsque ce champ est un astérisque (*), cela indique que la requête ne concerne pas une adresse de ressource spécifique, mais le serveur lui-même. HTTP- Version indique la version HTTP prise en charge, telle que HTTP/1.1. CRLF représente le caractère de retour chariot. Les champs d'en-tête de requête permettent au client de transmettre des informations supplémentaires sur la requête ou sur le client au serveur.
Le champ d'en-tête de la requête peut contenir les champs suivants : Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, From, Host, If-Modified-Since, If-Match, If-None-Match, If -Range, If-Range, If-Unmodified-Since, Max-Forwards, Proxy-Authorization, Range, Referer, User-Agent.
L'extension du champ d'en-tête de requête nécessite la prise en charge des deux parties communicantes. S'il existe un champ d'en-tête de requête non pris en charge, il sera généralement traité comme un champ d'en-tête d'entité.
Message de demande typique :
GET http://download.google.com/somedata.exe Host: download.google.com Accept:/ Pragma: no-cache Cache-Control: no-cache Referer: http://download.google.com/ User-Agent:Mozilla/4.04en Range:bytes=554554-
La première ligne de l'exemple ci-dessus indique que le client HTTP (peut-être un navigateur ou un téléchargeur) obtient l'URL sous l'URL spécifiée via le document de la méthode GET. La partie marron représente les informations du champ d'en-tête de la demande et la partie verte représente la partie générale de l'en-tête.
Champ d'en-tête Host
Le champ d'en-tête Host spécifie l'hôte Internet et le numéro de port de la ressource demandée, et doit indiquer l'emplacement du serveur ou de la passerelle d'origine de la ressource demandée. URL. Les requêtes HTTP/1.1 doivent inclure le champ d'en-tête de l'hôte, sinon le système renverra un code d'état 400.
Champ d'en-tête Referer
Le champ d'en-tête Referer permet au client de spécifier l'adresse de la ressource source de l'URI de la requête, ce qui permet au serveur de générer une liste de secours, qui peut être utilisé pour se connecter et optimiser l'attente du cache. Il permet également de suivre les connexions abandonnées ou défectueuses à des fins de maintenance. Si l’url demandée n’a pas sa propre adresse url, le Referer ne peut pas être envoyé. Si une adresse URL partielle est spécifiée, cette adresse doit être une adresse relative.
Champ d'en-tête Range
Le champ d'en-tête Range peut demander une ou plusieurs sous-plages de l'entité. Par exemple,
représente les 500 premiers octets : bytes=0-499
représente les seconds 500 octets : bytes=500-999
représente les 500 derniers octets : bytes=-500
Indique la plage après 500 octets : bytes=500-
Le premier et le dernier octets : bytes=0-0,-1
Spécifiez plusieurs plages en même temps : bytes=500-600,601-999
Mais le serveur peut ignorer cet en-tête de requête. Si le GET inconditionnel contient l'en-tête de requête Range, la réponse sera renvoyée avec le code d'état 206 (PartialContent) au lieu de 200 (OK).
Champ d'en-tête User-Agent
Le contenu du champ d'en-tête User-Agent contient les informations de l'utilisateur qui a fait la demande.
Message de réponse
La première ligne du message de réponse est au format suivant :
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
HTTP -Version indique la version HTTP prise en charge, telle que HTTP/1.1. Status-Code est un code de résultat à trois chiffres. Reason-Phrase fournit une description textuelle simple pour Status-Code. Status-Code est principalement utilisé pour l'identification automatique de la machine, et Reason-Phrase est principalement utilisé pour aider les utilisateurs à comprendre. Le premier chiffre de Status-Code définit la catégorie de la réponse, et les deux derniers chiffres n'ont aucun effet de classification. Le premier nombre peut prendre 5 valeurs différentes :
1xx : Classe de réponse d'information, indiquant que la demande est reçue et le traitement se poursuit.
2xx : Classe de réponse de réussite du traitement, indiquant que l'action a été reçue avec succès. , Comprendre et accepter
3xx : Classe de réponse de redirection, afin de terminer l'action spécifiée, un traitement ultérieur doit être accepté
4xx : Erreur client, la demande du client contient des erreurs de syntaxe ou ne peut pas être exécutée correctement
5xx : Erreur côté serveur, le serveur ne peut pas exécuter correctement une requête correcte
Le champ d'en-tête de réponse permet au serveur de transmettre des informations supplémentaires qui ne peuvent pas être placées dans la ligne d'état. Décrit principalement les informations sur le serveur et Request-URI Informations complémentaires. Les champs d'en-tête de réponse incluent Age, Location, Proxy-Authenticate, Public, Retry-After, Server, Vary, Warning et WWW-Authenticate. L'extension du champ d'en-tête de réponse nécessite la prise en charge par les deux parties communicantes. S'il existe un champ d'en-tête de réponse non pris en charge, il sera généralement traité comme un champ d'en-tête d'entité.
Message de réponse typique :
HTTP/1.0200OK Date:Mon,31Dec200104:25:57GMT Server:Apache/1.3.14(Unix) Content-type:text/html Last-modified:Tue,17Apr200106:46:28GMT Etag:”a030f020ac7c01:1e9f” Content-length:39725426 Content-range:bytes554554-40279979/40279980
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!