HTTP-If-Modified-Since-Header

Typ

Der If-Modified-Since-Header ist ein Conditional-Request-Header, der eine Ressource nur zurückgibt, wenn sie seit dem angegebenen Zeitstempel modifiziert wurde.

Syntax

Der Header enthält einen HTTP-Date-Timestamp im RFC 5322-Format (GMT-Zeitzone).

http
If-Modified-Since: Wed, 21 Oct 2025 07:28:00 GMT
If-Modified-Since: Sat, 01 Jan 2025 00:00:00 GMT

Direktiven

Der If-Modified-Since-Header akzeptiert ausschließlich einen HTTP-Date-Wert und wird nur bei GET- und HEAD-Requests berücksichtigt.

http-date
Ein RFC 5322-konformer Zeitstempel in GMT-Zeitzone, der das Datum der letzten bekannten Ressourcenversion angibt.
safe-methods-only
Der Header wird nur bei GET und HEAD ausgewertet, bei anderen HTTP-Methoden ignoriert.

Beispiele

Die folgenden Beispiele zeigen typische Anwendungsfälle für Cache-Revalidierung, Bandbreiten-Optimierung und inkrementelle Daten-Synchronisation.

Cache-Revalidierung bei REST-API

Ein Client validiert seine gecachte Ressource gegen die Server-Version und erhält 304 Not Modified bei unveränderter Ressource.

http
GET /api/v1/products/12345 HTTP/1.1
Host: api.example.com
If-Modified-Since: Wed, 01 Sep 2025 10:00:00 GMT
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Response bei unveränderter Ressource:

http
HTTP/1.1 304 Not Modified
Last-Modified: Wed, 01 Sep 2025 10:00:00 GMT
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Cache-Control: max-age=3600

Response bei modifizierter Ressource:

http
HTTP/1.1 200 OK
Last-Modified: Fri, 15 Sep 2025 14:30:00 GMT
ETag: "a7f3b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9"
Content-Type: application/json

{
  "id": "12345",
  "name": "Premium Widget",
  "price": 149.99,
  "updatedAt": "2025-09-15T14:30:00Z"
}

Inkrementelle Daten-Synchronisation

Ein Client synchronisiert nur geänderte Datensätze seit dem letzten Sync-Zeitpunkt.

http
GET /api/v1/inventory/changes HTTP/1.1
Host: api.example.com
If-Modified-Since: Tue, 30 Sep 2025 23:59:59 GMT
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Bandbreiten-Optimierung für Mobile Clients

Ein Mobile-Client vermeidet unnötige Downloads durch Conditional Requests mit If-Modified-Since.

http
GET /api/v1/config/mobile-app HTTP/1.1
Host: api.example.com
If-Modified-Since: Mon, 15 Sep 2025 08:00:00 GMT
Accept: application/json
User-Agent: MobileApp/2.3.1 (iOS 17.0)

Cache-Validierung-Flow

Der If-Modified-Since-Header ermöglicht effiziente Cache-Revalidierung durch Zeitstempel-Vergleich ohne vollständige Ressourcen-Übertragung.

plantuml
@startuml
!theme plain
skinparam BoxPadding 20
skinparam ParticipantPadding 20

participant "Client" as client
participant "API\nServer" as api
database "Database" as db
participant "Client\nCache" as cache

client -> api: GET /api/products/123
api -> db: SELECT * FROM products\nWHERE id = 123
db --> api: Product Data
api --> client: 200 OK\nLast-Modified: 2025-09-01 10:00:00\nETag: "abc123"\n[Product JSON]

client -> cache: Store product\nwith Last-Modified timestamp
cache --> client: Cached

note over client: 1 Stunde später:\nClient benötigt Ressource

client -> cache: GET product 123
cache --> client: Found:\nLast-Modified: 2025-09-01 10:00:00

client -> api: GET /api/products/123\nIf-Modified-Since: Mon, 01 Sep 2025 10:00:00 GMT
api -> db: SELECT last_modified\nFROM products\nWHERE id = 123
db --> api: last_modified: 2025-09-01 10:00:00
api -> api: Compare timestamps:\nNOT modified

api --> client: 304 Not Modified\nLast-Modified: 2025-09-01 10:00:00\nETag: "abc123"

client -> cache: Use cached version

note over client: Bandbreite gespart:\nKeine JSON-Übertragung
@enduml

Vorteile für die Systemarchitektur

  • Bandbreiten-Reduktion durch 304-Not-Modified-Responses ohne Body
  • Cache-Revalidierung für HTTP-Caches und Client-seitige Caches
  • Kombinierbar mit ETag-Header für präzisere Validierung
  • Automatische Unterstützung in HTTP-Libraries und Frameworks
  • Effizient für Ressourcen mit Last-Modified-Timestamps

Spezifikation

RFC 9110 (HTTP Semantics) definiert den If-Modified-Since-Header als Conditional-Request-Mechanismus für Zeitstempel-basierte Cache-Validierung bei GET und HEAD.

Weitere Spezifikationen

Last-Modified Header, HTTP Status 304 - Not Modified, If-Unmodified-Since Header