HTTP Date Header

Typ

Der Date-Header ist ein HTTP-General-Header, mit dem der Sender den Zeitpunkt angibt, zu dem die HTTP-Nachricht ursprünglich generiert wurde.

Syntax

Der Header enthält einen Zeitstempel im HTTP-Date-Format nach RFC 5322.

http
Date: Wed, 21 Oct 2015 07:28:00 GMT
Date: Tue, 15 Nov 1994 08:12:31 GMT

Direktiven

Der Date-Header verwendet ein standardisiertes Datumsformat:

http-date
Zeitstempel im IMF-fixdate-Format (Internet Message Format). Zeitzone ist immer GMT. Format: Day, DD Mon YYYY HH:MM:SS GMT.
server-clock
Repräsentiert die Serverzeit zum Zeitpunkt der Response-Generierung. Wichtig für Age-Berechnungen in Caching-Szenarien.

Beispiele

API-Response mit Date-Header für Caching

Ein REST-API-Endpunkt liefert Daten mit Zeitstempel:

http
GET /api/v1/products/12345 HTTP/1.1
Host: api.example.com
Accept: application/json

Der Server antwortet mit Date-Header:

http
HTTP/1.1 200 OK
Date: Wed, 01 Oct 2025 10:25:00 GMT
Last-Modified: Wed, 01 Oct 2025 09:00:00 GMT
Cache-Control: public, max-age=3600
ETag: "v123-abc"
Content-Type: application/json

{
  "product_id": "12345",
  "name": "Premium Widget",
  "price": 99.99
}

Zeitbasierte API-Authentifizierung mit Date-Validierung

Ein API-Client sendet eine signierte Anfrage mit Date-Header:

http
POST /api/v1/orders HTTP/1.1
Host: api.example.com
Date: Wed, 01 Oct 2025 10:25:00 GMT
Authorization: AWS4-HMAC-SHA256 Credential=...
Content-Type: application/json

{
  "product_id": "SKU-789",
  "quantity": 2
}

Der Server validiert Zeitstempel und lehnt veraltete Requests ab:

http
HTTP/1.1 403 Forbidden
Date: Wed, 01 Oct 2025 10:40:00 GMT
Content-Type: application/json

{
  "error": "RequestTimeTooSkewed",
  "message": "Request date differs from server time by more than 15 minutes"
}

CDN-Caching mit Date und Age-Header

Ein CDN-Cache liefert eine zwischengespeicherte API-Response:

http
GET /api/v1/config/settings.json HTTP/1.1
Host: cdn.example.com

Der CDN antwortet mit Date und Age:

http
HTTP/1.1 200 OK
Date: Wed, 01 Oct 2025 10:00:00 GMT
Age: 1500
Cache-Control: public, max-age=3600
X-Cache: HIT
Content-Type: application/json

{
  "api_version": "v1",
  "features": ["webhooks", "rate_limiting"]
}

Date-Header-in-Distributed-API-Flow

Der Ablauf der Date-Header-Verwendung in verteilten API-Systemen mit Caching.

plantuml
@startuml
actor Client
participant "API Gateway" as Gateway
participant "CDN Cache" as CDN
participant "Origin API" as Origin

Client -> Gateway: GET /api/v1/resource
Gateway -> CDN: Check cache

CDN -> Origin: Cache miss\nGET /api/v1/resource
Origin -> Origin: Generate response\nSet Date: 10:00:00 GMT
Origin --> CDN: 200 OK\nDate: 10:00:00 GMT\nCache-Control: max-age=3600

CDN -> CDN: Store response\nwith Date header
CDN --> Gateway: 200 OK\nDate: 10:00:00 GMT\nAge: 0

Gateway --> Client: 200 OK\nDate: 10:00:00 GMT

Client -> Gateway: GET /api/v1/resource\n(15 min later)
Gateway -> CDN: Check cache

CDN -> CDN: Cache hit\nCalculate Age: now - Date\nAge = 900 seconds
CDN --> Gateway: 200 OK\nDate: 10:00:00 GMT\nAge: 900

Gateway --> Client: 200 OK\nDate: 10:00:00 GMT\nAge: 900

note right
Client knows response was
generated 15 minutes ago
and is still fresh
end note
@enduml

Vorteile für die Systemarchitektur

  • Ermöglicht präzise Age-Berechnung für Cache-Freshness-Validierung
  • Unterstützt zeitbasierte Authentifizierung und Replay-Attack-Prevention
  • Synchronisiert verteilte API-Systeme durch gemeinsame Zeitreferenz
  • Hilft bei Debugging durch Nachvollziehbarkeit von Request-Response-Timings
  • Erforderlich für HTTP-konforme Caching-Mechanismen in CDNs und Proxies

Spezifikation

Der Date-Header ist in RFC 9110 Section 6.6.1 (HTTP Semantics) definiert.

Weitere Spezifikationen

Last-Modified Header, Age Header