Les en-têtes HTTP sont des chaines de paires name:value (nom et valeur séparés par deux points) qui sont utilisées pour communiquer des informations supplémentaires et des métadonnées entre un client (généralement un navigateur web) et une application sur un serveur. Ces informations peuvent inclure le mode de codage des données, la manière dont le serveur doit traiter les données, l’âge du document, etc.

Les en-têtes de réponse (de l’application au client) font partie de la réponse de l’application et peuvent contenir des informations comme l’emplacement du serveur, son nom, etc.

Les en-têtes de requête (du client vers l’application) sont utiles si vous souhaitez personnaliser votre application. En voici quelques exemples :

  • Signaler différents types de contenu selon la région du client en utilisant CF-IPCountry.
  • Utiliser CF-Connecting-IP pour enregistrer l’IP du client dans le journal d’activité de l’application.
  • Effectuer le débogage ou la surveillance des sessions utilisateur en utilisant X-Request-ID.

En-têtes de requête ajoutés par Kinsta

Lorsque vous déployez une application sur Kinsta, les en-têtes suivants sont utilisés pour envoyer des informations à l’application :

  • Host: L’en-tête d’hôte spécifie le nom d’hôte et le numéro de port du serveur qui est demandé.
  • X-Request-ID: Utilisé pour identifier une requête entre le client et le serveur. Cet en-tête peut être utile à des fins de débogage.
  • X-Real-IP: Spécifie l’adresse IP réelle du client qui a fait la demande. Cet en-tête est couramment utilisé par les proxies inversés et les équilibreurs de charge pour indiquer l’adresse IP originale du client.
  • X-Forwarded-For: Utilisé pour spécifier l’adresse IP du client et peut également contenir une liste d’adresses IP si la requête passe par plusieurs proxies.
  • X-Forwarded-Host: Spécifie l’hôte original demandé par le client.
  • X-Forwarded-Port: Spécifie le port utilisé par le client pour faire la requête.
  • X-Forwarded-Proto: Spécifie le protocole que le client utilise pour faire la requête, tel que « HTTP » ou « HTTPS »
  • X-Forwarded-Scheme: Spécifie le schéma que le client utilise pour faire la requête, tel que « HTTP » ou « HTTPS »
  • X-Scheme: Cet en-tête est similaire à X-Forwarded-Scheme, et est utilisé pour indiquer le schéma original demandé par le client.
  • X-Original-Forwarded-For: Spécifie l’adresse IP originale du client dans une requête qui a traversé plusieurs proxies.
  • Accept-Encoding: Spécifie les types d’encodage que le client peut accepter dans la réponse, comme gzip ou deflate.
  • CF-Ray: Un identifiant unique généré par le service Cloudflare pour chaque requête.
  • CF-Visitor: Utilisé par Cloudflare pour transmettre au serveur des informations sur le navigateur et l’appareil du client.
  • CF-EW-Via: Utilisé par le service Cloudflare Edge Workers pour indiquer qu’un Edge Worker a traité une requête.
  • CDN-Loop: Utilisé par certains réseaux de diffusion de contenu pour indiquer qu’une requête est bloquée dans une boucle et doit être terminée.
  • Accept: Spécifie les types de médias que le client peut traiter dans la réponse, comme text/html ou application/json.
  • User-Agent: Spécifie la chaîne de l’agent utilisateur du client, qui peut être utilisée pour identifier le navigateur et le système d’exploitation du client.
  • CF-Connecting-IP: Spécifie l’adresse IP du client qui se connecte au serveur via le réseau Cloudflare.
  • CF-Worker: Utilisé pour indiquer qu’un travailleur Cloudflare a traité une requête.
  • CF-IPCountry: Spécifie le code pays de l’adresse IP du client, tel que déterminé par Cloudflare.

Affichage des en-têtes de requête

Alors que les en-têtes de réponse peuvent être visualisés avec des outils tels que HTTP Status and Redirect Checker de Kinsta, curl, Postman, Insomnia, etc. Pour visualiser les en-têtes de requête, vous pouvez utiliser le code de votre application pour voir et signaler les en-têtes qui lui sont envoyés. Voici un exemple de ceci en utilisant Python :

from http.server import BaseHTTPRequestHandler, HTTPServer
import loggingclass RequestHandler(BaseHTTPRequestHandler) :
def do_GET(self) :
logging.info("Demande GET,nPath : %snHeaders:n%sn",
str(self.path), str(self.headers))
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
message = f "{self.headers}"
self.wfile.write(bytes(message, 'utf-8'))
returndef run(server_class=HTTPServer, handler_class=RequestHandler, port=8080) :
logging.basicConfig(level=logging.INFO)
server_address = ('', port)
httpd = server_class(server_address, handler_class)
logging.info('Démarrage de httpd...n')
essayer :
httpd.serve_forever()
sauf KeyboardInterrupt :
pass
httpd.server_close()
logging.info('Stopping httpd...n')if __name__ == '__main__' :
from sys import argvif len(argv) == 2 :
run(port=int(argv[1]))
autre :
run()

Documentation connexe