-> Inter-Data -> Blog -> Optimale HTTP-Header für bessere Performance und Sicherheit

Optimale HTTP-Header für bessere Performance und Sicherheit

Autor: Ronny Zimmermann

Einführung

Die richtigen HTTP-Header sind entscheidend für die Performance, Sicherheit und Cache-Optimierung deiner Website. Sie bestimmen, wie lange Inhalte im Browser zwischengespeichert werden, welche Sicherheitsrichtlinien greifen und wie externe Anfragen behandelt werden. In diesem Beitrag erfährst du, welche Header besonders wichtig sind und wie du sie in HugoCMS, Nginx oder Apache korrekt konfigurierst.


Wichtige HTTP-Header für Performance und Sicherheit

Date

Dieser Header zeigt das Datum und die Uhrzeit des Servers, zu der die Antwort gesendet wurde.

Date: Wed, 12 Feb 2025 18:40:41 GMT

Tipp: Dieser Header wird automatisch vom Server gesetzt und muss nicht manuell geändert werden.


Server

Dieser Header gibt an, welche Software der Server verwendet.

Server: Apache

Tipp: Vermeide die Anzeige dieses Headers aus Sicherheitsgründen. In Apache kannst du ihn deaktivieren mit:

ServerTokens Prod

Strict-Transport-Security (HSTS)

Dieser Header zwingt den Browser, nur über HTTPS auf die Seite zuzugreifen.

Strict-Transport-Security: max-age=31536000; includeSubDomains

Empfohlen für alle Websites! Setze diesen Header in Nginx oder Apache:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

X-Frame-Options

Schützt deine Seite vor Clickjacking-Angriffen.

X-Frame-Options: DENY

Tipp: Verwende DENY, um die Einbettung in iFrames zu verhindern.


X-Content-Type-Options

Verhindert MIME-Type-Sniffing und schützt vor Content Injection-Angriffen.

X-Content-Type-Options: nosniff

Tipp: Setze diesen Header, um sicherzustellen, dass der Browser Dateien nur mit dem richtigen MIME-Typ verarbeitet.


Referrer-Policy

Steuert, welche Referrer-Informationen an andere Websites gesendet werden.

Referrer-Policy: strict-origin-when-cross-origin

Tipp: Diese Einstellung bietet ein gutes Gleichgewicht zwischen Sicherheit und Funktionalität.


Age

Zeigt an, wie lange eine zwischengespeicherte Ressource bereits im Cache liegt.

Age: 5115

Tipp: Falls Age: 0 oder Nicht vorhanden ist, könnte dein Server kein Caching verwenden.


Cache-Control

Definiert, wie lange Inhalte zwischengespeichert werden.

Cache-Control: no-cache, private

Optimierung:

  • Für statische Inhalte: public, max-age=31536000, immutable
  • Für dynamische Inhalte: private, no-cache, must-revalidate

Apache-Konfiguration:

Header set Cache-Control "public, max-age=31536000, immutable"

Nginx-Konfiguration:

location /static/ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
}

HTTP-Header in HugoCMS setzen

Hugo selbst kann keine HTTP-Header setzen, da es nur statische Dateien generiert. Je nach Serverumgebung musst du die Header an der richtigen Stelle konfigurieren:

Falls dein Hosting Apache nutzt, kannst du eine .htaccess Datei in static/ ablegen:

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  Header always set X-Frame-Options "DENY"
  Header always set X-Content-Type-Options "nosniff"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Cache-Control "public, max-age=31536000, immutable"
</IfModule>

Falls du Nginx nutzt, bearbeite deine nginx.conf, um die Header global zu setzen.

Falls du ein CDN (Cloudflare, Fastly) verwendest, kannst du die Header direkt dort definieren.


Das Script zur Überprüfung der HTTP-Header

Mit diesem Python-Skript kannst du die HTTP-Header einer Webseite überprüfen und deren Ping-Zeit messen.

Installation und Ausführung

Speichere das Skript als check_headers.py und führe es mit:

python3 check_headers.py

Python-Skript:

import requests
import subprocess
import re
from datetime import datetime

# Liste der zu testenden Webseiten
URLS = [
    "https://autoprofis24.de",
    "https://flexrohr24.de",
    "https://hugocms.com"
]

def get_ping(url):
    """Führt einen Ping-Test für die URL aus und gibt die durchschnittliche Antwortzeit zurück."""
    domain = url.replace("https://", "").replace("http://", "").split("/")[0]
    try:
        result = subprocess.run(["ping", "-c", "4", domain], capture_output=True, text=True)
        output = result.stdout
        times = re.findall(r'time=(\d+\.\d+)', output)
        if times:
            times = [float(t) for t in times]
            avg_ping = round(sum(times) / len(times), 2)
            return f"{avg_ping} ms"
        return "Keine Antwort"
    except Exception as e:
        return "Fehler beim Ping"

def check_headers(url):
    """Prüft verschiedene HTTP-Header einer Webseite und gibt Optimierungstipps aus."""
    try:
        response = requests.head(url, timeout=10)
        headers = response.headers
        
        header_info = {
            "Date": headers.get("Date", "Nicht vorhanden"),
            "Server": headers.get("Server", "Nicht vorhanden"),
            "Strict-Transport-Security": headers.get("Strict-Transport-Security", "Nicht vorhanden"),
            "X-Frame-Options": headers.get("x-frame-options", "Nicht vorhanden"),
            "X-Content-Type-Options": headers.get("X-Content-Type-Options", "Nicht vorhanden"),
            "Referrer-Policy": headers.get("Referrer-Policy", "Nicht vorhanden"),
            "Age": headers.get("Age", "Nicht vorhanden"),
            "Cache-Control": headers.get("Cache-Control", "Nicht vorhanden"),
            "Content-Type": headers.get("Content-Type", "Nicht vorhanden"),
            "Ping": get_ping(url),
        }
        
        print(f"Überprüfung für {url}")
        for key, value in header_info.items():
            print(f"{key}: {value}")
        print("-" * 80)
        
    except requests.RequestException as e:
        print(f"Fehler beim Abrufen der Daten für {url}: {e}")
        print("Überprüfe die Erreichbarkeit der Seite.")

def run_header_check():
    """Führt den Header-Test für alle URLs durch."""
    for url in URLS:
        check_headers(url)

if __name__ == "__main__":
    run_header_check()

Fazit

Die richtigen HTTP-Header verbessern nicht nur die Performance, sondern schützen deine Website vor Angriffen. Besonders wichtig sind Cache-Control, Strict-Transport-Security und X-Content-Type-Options.

Viel Erfolg bei der Optimierung deiner Webseite!