HTTP-Device-Memory-Header

Typ

Der Device-Memory-Header ist ein HTTP-Request-Header und Client Hint, mit dem der Client die ungefähre RAM-Kapazität seines Geräts in Gigabyte an den Server übermittelt.

Syntax

Der Header enthält einen numerischen Wert, der die verfügbare Gerätespeicherkapazität angibt.

http
Device-Memory: 8
Device-Memory: 4

Direktiven

Der Device-Memory-Header verwendet einen gerundeten Speicherwert:

memory-value
RAM-Kapazität in Gigabyte, gerundet auf 0.25, 0.5, 1, 2, 4, 8 GB. Werte werden nach oben gerundet, um Fingerprinting zu erschweren.
privacy-preserving
Nur grobe RAM-Kategorien werden übermittelt, nicht die exakte Speichergröße. Dies reduziert Fingerprinting-Risiken.
opt-in-required
Der Header wird nur gesendet, wenn der Server zuvor per Accept-CH: Device-Memory das Opt-in angefordert hat.

Beispiele

API passt Response-Größe an Gerätespeicher an

Ein Client mit begrenztem RAM fragt Produktdaten an:

http
GET /api/v1/products?category=electronics HTTP/1.1
Host: shop.example.com
Device-Memory: 2
Accept: application/json

Die API liefert eine reduzierte Payload für Low-Memory-Geräte:

http
HTTP/1.1 200 OK
Vary: Device-Memory
Content-Type: application/json

{
  "products": [
    {
      "id": "12345",
      "name": "Laptop Pro",
      "price": 1299.99,
      "thumbnail": "small.jpg"
    }
  ],
  "pagination": {
    "page_size": 10,
    "total": 100
  }
}

Client mit High-Memory-Gerät erhält erweiterte Daten:

http
GET /api/v1/products?category=electronics HTTP/1.1
Host: shop.example.com
Device-Memory: 8
Accept: application/json
http
HTTP/1.1 200 OK
Vary: Device-Memory
Content-Type: application/json

{
  "products": [
    {
      "id": "12345",
      "name": "Laptop Pro",
      "price": 1299.99,
      "description": "High-performance laptop with...",
      "images": ["full_1.jpg", "full_2.jpg"],
      "specifications": {...},
      "reviews": [...]
    }
  ],
  "pagination": {
    "page_size": 50,
    "total": 100
  }
}

CDN-API optimiert Assets basierend auf Device-Memory

Eine CDN-API liefert unterschiedliche JavaScript-Bundle-Größen:

http
GET /api/v1/bundles/app.js HTTP/1.1
Host: cdn.example.com
Device-Memory: 1

Der Server liefert ein minimal optimiertes Bundle:

http
HTTP/1.1 200 OK
Vary: Device-Memory
Content-Type: application/javascript
Cache-Control: public, max-age=31536000

// Minimales Bundle: 50KB, essential features only
// Lazy loading für zusätzliche Features

Accept-CH fordert Device-Memory für adaptive APIs

Ein API-Gateway fordert Device-Memory-Hints an:

http
GET /api/v1/dashboard HTTP/1.1
Host: app.example.com

Der Server fordert Device-Memory für zukünftige Requests:

http
HTTP/1.1 200 OK
Accept-CH: Device-Memory, Downlink, ECT
Content-Type: application/json

{
  "message": "Future requests will include device hints"
}

Device-Memory-Adaptive-API-Flow

Der Ablauf der adaptiven Content Delivery basierend auf Device-Memory.

plantuml
@startuml
actor "Low-End Device\n(2GB RAM)" as LowDevice
actor "High-End Device\n(8GB RAM)" as HighDevice
participant "API Gateway" as Gateway
participant "Content Service" as Content

LowDevice -> Gateway: GET /api/v1/content\nDevice-Memory: 2
Gateway -> Content: Request content\nfor low-memory device
Content -> Content: Generate lightweight\nresponse (reduced data)
Content --> Gateway: Minimal payload\n(essential data only)
Gateway --> LowDevice: 200 OK\nVary: Device-Memory\n[50KB response]

HighDevice -> Gateway: GET /api/v1/content\nDevice-Memory: 8
Gateway -> Content: Request content\nfor high-memory device
Content -> Content: Generate rich response\n(full data, prefetch)
Content --> Gateway: Full payload\n(with media, metadata)
Gateway --> HighDevice: 200 OK\nVary: Device-Memory\n[250KB response]

note right
Both devices get optimized
experience matching their
hardware capabilities
end note
@enduml

Vorteile für die Systemarchitektur

  • Ermöglicht adaptive Content Delivery basierend auf Client-Hardware-Kapazität
  • Reduziert Out-of-Memory-Fehler durch payload-size-Anpassung für Low-End-Geräte
  • Verbessert Performance durch Auslieferung optimierter Bundle-Größen
  • Privacy-preserving durch gerundete Werte statt exakter RAM-Angaben
  • Kombinierbar mit anderen Client Hints für vollständig adaptive APIs

Spezifikation

Der Device-Memory-Header ist im Device Memory Draft definiert.

Weitere Spezifikationen

Accept-CH Header, Downlink Header