HTTP-Kopfzeilen
HTTP-Header sind Strings aus name:value
Paaren (Name und Wert durch einen Doppelpunkt getrennt), die verwendet werden, um zusätzliche Informationen und Metadaten zwischen einem Client (in der Regel ein Webbrowser) und einer Anwendung auf einem Server zu übermitteln. Diese Informationen können beinhalten, wie die Daten kodiert sind, wie der Server die Daten behandeln soll, das Alter des Dokuments und mehr.
Antwort-Header (von der Anwendung zum Client) sind Teil der Antwort der Anwendung und können Informationen wie den Serverstandort, den Servernamen usw. enthalten.
Request-Header (vom Client an die Anwendung) sind hilfreich, wenn du deine Anwendung anpassen möchtest. Ein paar Beispiele sind:
- Die Meldung verschiedener Arten von Inhalten je nach Region des Clients mit
CF-IPCountry
. - Verwendung von
CF-Connecting-IP
, um die Client-IP im Aktivitätsprotokoll der Anwendung aufzuzeichnen. - Debugging oder Überwachung von Benutzersitzungen mit
X-Request-ID
.
Von Kinsta hinzugefügte Request Header
Wenn du eine Anwendung auf Kinsta bereitstellst, werden die folgenden Header verwendet, um Informationen an die Anwendung zu senden:
Host
: Der Host-Header gibt den Hostnamen und die Portnummer des Servers an, der angefordert wird.X-Request-ID
: Er wird verwendet, um eine Anfrage zwischen dem Client und dem Server zu identifizieren. Dieser Header kann für Debugging-Zwecke nützlich sein.X-Real-IP
: Gibt die tatsächliche IP-Adresse des Clients an, der die Anfrage gestellt hat. Dieser Header wird häufig von Reverse Proxies und Load Balancern verwendet, um die ursprüngliche Client-IP-Adresse anzugeben.X-Forwarded-For
: Wird verwendet, um die IP-Adresse des Clients anzugeben, und kann auch eine Liste von IP-Adressen enthalten, wenn die Anfrage mehrere Proxys durchläuft.X-Forwarded-Host
: Gibt den ursprünglichen Host an, den der Client angefordert hat.X-Forwarded-Port
: Gibt den Port an, über den der Client die Anfrage gestellt hat.X-Forwarded-Proto
: Gibt das Protokoll an, das der Client für die Anfrage verwendet, z. B. „HTTP“ oder „HTTPS“X-Forwarded-Scheme
: Gibt das Schema an, das der Client für die Anfrage verwendet, z. B. „HTTP“ oder „HTTPS“X-Scheme
: Der Header ist ähnlich wieX-Forwarded-Scheme
und wird verwendet, um das ursprüngliche Schema anzugeben, das der Client angefordert hat.X-Original-Forwarded-For
: Gibt die ursprüngliche IP-Adresse des Clients bei einer Anfrage an, die mehrere Proxys durchlaufen hat.Accept-Encoding
: Gibt die Kodierungsarten an, die der Client in der Antwort akzeptieren kann, z. B.gzip
oderdeflate
.CF-Ray
: Ein eindeutiger Bezeichner, der vom Cloudflare-Dienst für jede Anfrage generiert wird.CF-Visitor
: Wird von Cloudflare verwendet, um Informationen über den Browser und das Gerät des Kunden an den Server zu übermitteln.CF-EW-Via
: Wird vom Cloudflare Edge Workers Service verwendet, um anzuzeigen, dass ein Edge Worker eine Anfrage bearbeitet hat.CDN-Loop
: Wird von einigen Content Delivery Networks verwendet, um anzuzeigen, dass eine Anfrage in einer Schleife steckt und beendet werden muss.Accept
: Gibt die Medientypen an, die der Client in der Antwort verarbeiten kann, z. B.text/html
oderapplication/json
.User-Agent
: Gibt den User-Agent-String des Clients an, der zur Identifizierung des Browsers und des Betriebssystems des Clients verwendet werden kann.CF-Connecting-IP
: Gibt die IP-Adresse des Clients an, der sich über das Cloudflare-Netzwerk mit dem Server verbindet.CF-Worker
: Zeigt an, dass ein Cloudflare-Worker eine Anfrage bearbeitet hat.CF-IPCountry
: Gibt den von Cloudflare ermittelten Ländercode der IP-Adresse des Clients an.
Anzeige der Request-Header
Während die Antwort-Header mit Tools wie dem HTTP Status and Redirect Checker von Kinsta, curl
, Postman, Insomnia usw. eingesehen werden können, ist die Anzeige der Request-Header etwas anders. Um Request-Header einzusehen, kannst du den Code deiner Anwendung verwenden, um die an sie gesendeten Header zu sehen und zu melden. Hier ist ein Beispiel mit Python:
from http.server import BaseHTTPRequestHandler, HTTPServer
import loggingclass RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
logging.info("GET-Anfrage,nPfad: %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('httpd starten...n')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
logging.info('httpd stoppen...n')if __name__ == '__main__':
from sys import argvif len(argv) == 2:
run(port=int(argv[1]))
else:
run()