HTTP NEL Header

Typ

Der NEL-Header ist ein HTTP-Response-Header, der Network Error Logging im Browser aktiviert, um Netzwerkfehler automatisch an einen Collector-Endpunkt zu melden.

Syntax

Der NEL-Header enthält eine JSON-Struktur mit Konfigurationsparametern für das Fehlerreporting, einschließlich Report-URL, maximaler Gültigkeitsdauer und optionaler Fehlerrate-Sampling.

http
NEL: {"report_to":"network-errors","max_age":86400,"include_subdomains":true,"success_fraction":0.01,"failure_fraction":1.0}

Direktiven

Der NEL-Header definiert mehrere Direktiven zur Steuerung des Network Error Logging-Verhaltens für API-Zugriffe und CDN-Auslieferungen.

report_to
Name der Reporting-Gruppe (aus dem Report-To-Header), an die Fehlerberichte gesendet werden sollen, typischerweise eine dedizierte API-Monitoring-Endpoint-Gruppe.
max_age
Gültigkeitsdauer der NEL-Policy in Sekunden, nach der der Browser keine Fehlerberichte mehr sammelt, ohne eine neue Policy-Instruktion.
include_subdomains
Boolescher Wert, der festlegt, ob die NEL-Policy auch für alle Subdomains der API-Domain gilt, nützlich für verteilte Microservice-Architekturen.
success_fraction
Anteil erfolgreicher Requests (0.0 bis 1.0), die reportiert werden sollen, um Baseline-Performance-Metriken zu sammeln, ohne die Report-Infrastruktur zu überlasten.
failure_fraction
Anteil fehlgeschlagener Requests (0.0 bis 1.0), die reportiert werden sollen, typischerweise auf 1.0 gesetzt für vollständiges API-Fehlertracking.

Beispiele

Die folgenden Beispiele zeigen typische NEL-Konfigurationen für API-Monitoring, CDN-Fehlertracking und unterschiedliche Sampling-Strategien für Production-Umgebungen.

NEL-Policy für API-Gateway mit vollständigem Fehlerreporting

http
HTTP/1.1 200 OK
NEL: {"report_to":"api-errors","max_age":2592000,"include_subdomains":false,"failure_fraction":1.0}
Report-To: {"group":"api-errors","max_age":2592000,"endpoints":[{"url":"https://monitoring.example.com/api/v1/nel"}]}
Content-Type: application/json

{
  "status": "success",
  "data": {
    "orders": []
  }
}

NEL-Policy für CDN mit Subdomain-Abdeckung und Success-Sampling

http
HTTP/1.1 200 OK
NEL: {"report_to":"cdn-network","max_age":86400,"include_subdomains":true,"success_fraction":0.05,"failure_fraction":1.0}
Report-To: {"group":"cdn-network","max_age":86400,"endpoints":[{"url":"https://cdn-analytics.example.com/collect/nel"}]}
Cache-Control: public, max-age=3600
Content-Type: application/javascript

// JavaScript resource

NEL-Policy für Microservice mit reduziertem Failure-Sampling

http
HTTP/1.1 200 OK
NEL: {"report_to":"service-monitoring","max_age":604800,"include_subdomains":false,"success_fraction":0.01,"failure_fraction":0.5}
Report-To: {"group":"service-monitoring","max_age":604800,"endpoints":[{"url":"https://telemetry.example.com/v2/nel-reports"}]}
Content-Type: application/json

{
  "userId": "12345",
  "profile": {}
}

Network Error Logging Flow

Der Ablauf zeigt, wie Browser Netzwerkfehler sammeln und asynchron an Monitoring-Endpunkte senden, unabhängig vom ursprünglichen API-Request-Lifecycle.

plantuml
@startuml
actor Client
participant Browser
participant "API Server" as API
participant "NEL Collector" as Collector

Client -> Browser: Request API Resource
Browser -> API: GET /api/v1/orders
API --> Browser: 200 OK\nNEL: {"report_to":"api-errors",...}
Browser -> Browser: Store NEL Policy

alt Network Error Occurs
    Client -> Browser: Request API Resource
    Browser -> API: GET /api/v1/products
    Browser <-- API: Connection Timeout
    Browser -> Browser: Generate NEL Report
    Browser -> Collector: POST /api/v1/nel\n[NEL Report JSON]
    Collector --> Browser: 204 No Content
end

alt Successful Request (with sampling)
    Client -> Browser: Request API Resource
    Browser -> API: GET /api/v1/users/123
    Browser <-- API: 200 OK
    Browser -> Browser: Sample Success (5% chance)
    Browser -> Collector: POST /api/v1/nel\n[Success Report]
    Collector --> Browser: 204 No Content
end

@enduml

Vorteile für die Systemarchitektur

  • Automatisches Sammeln von Netzwerkfehlern (DNS, TLS, TCP) ohne manuelle Client-Instrumentation für API-Monitoring
  • Vollständige Abdeckung von Fehlern vor dem Application Layer, einschließlich CDN-Ausfällen und Routing-Problemen
  • Asynchrones Reporting verhindert Performance-Impact auf kritische API-Requests
  • Sampling-Kontrolle ermöglicht Balance zwischen Monitoring-Genauigkeit und Report-Infrastruktur-Kosten
  • Subdomain-Support erlaubt zentrale Fehlersammlung für verteilte Microservice-Architekturen

Spezifikation

Der NEL-Header ist in der W3C Network Error Logging Specification definiert und ermöglicht Browser-natives Sammeln von Netzwerkfehlern für verbesserte API-Zuverlässigkeitsanalyse.

Weitere Spezifikationen

Report-To Header, Reporting-Endpoints Header