HTTP Origin Header

Typ

Der Origin-Header ist ein HTTP-Request-Header, der die Herkunft eines Cross-Origin-Requests identifiziert, kritisch für CORS-Validierung und Same-Origin-Policy-Enforcement bei API-Zugriffen.

Syntax

Der Origin-Header enthält die Schema, Domain und Port-Komponente der aufrufenden Website als nullbaren serialisierten Origin-String, ohne Pfad-Information.

http
Origin: https://example.com

Direktiven

Der Origin-Header hat keine konfigurierbaren Direktiven, sondern transportiert nur den serialisierten Origin-Wert, der vom Browser automatisch gesetzt wird und nicht durch JavaScript manipuliert werden kann.

<scheme>://<host>[:<port>]
Die vollständige Origin-Angabe bestehend aus Schema (https), Hostname (api.example.com) und optionalem Port (8443), die eindeutig die Herkunft des Requests identifiziert.
null
Spezieller Wert für Privacy-sensitive Kontexte wie redirected Requests, Data-URLs oder Sandboxed-Frames, wo die tatsächliche Origin nicht preisgegeben werden soll.

Beispiele

Die folgenden Beispiele zeigen Origin-Header in verschiedenen Cross-Origin-API-Request-Szenarien, CORS-Preflight-Requests und Privacy-Kontexten mit null-Origin.

CORS-Preflight-Request für REST API von Web-Application

http
OPTIONS /api/v1/users HTTP/1.1
Host: api.example.com
Origin: https://app.client-domain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type, Authorization

Cross-Origin API-Request mit Authentication

http
POST /api/v1/orders HTTP/1.1
Host: api.example.com
Origin: https://shop.client-domain.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

{
  "productId": "prod-123",
  "quantity": 2
}

Null-Origin bei Privacy-sensitive Redirect

http
GET /api/v1/public/status HTTP/1.1
Host: api.example.com
Origin: null

CORS Validation Flow mit Origin Header

Der Ablauf zeigt, wie API-Server Origin-Header validieren und Access-Control-Response-Header zurückgeben, um Cross-Origin-Zugriffe selektiv zu erlauben oder zu blockieren.

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

== Preflight Request ==

Client -> Browser: fetch('https://api.example.com/v1/users',\n{method: 'POST'})
Browser -> Browser: Detect Cross-Origin Request
Browser -> API: OPTIONS /api/v1/users\nOrigin: https://app.client.com
API -> API: Validate Origin against whitelist
alt Origin allowed
    API --> Browser: 200 OK\nAccess-Control-Allow-Origin: https://app.client.com\nAccess-Control-Allow-Methods: POST, GET
    Browser -> Browser: Preflight passed

    == Actual Request ==
    Browser -> API: POST /api/v1/users\nOrigin: https://app.client.com\n{JSON body}
    API -> API: Process request
    API --> Browser: 201 Created\nAccess-Control-Allow-Origin: https://app.client.com
    Browser --> Client: Response data
else Origin not allowed
    API --> Browser: 403 Forbidden
    Browser -> Browser: Block response from JavaScript
    Browser --> Client: CORS Error
end

@enduml

Vorteile für die Systemarchitektur

  • Fundamentale Sicherheitsschicht gegen CSRF-Angriffe auf API-Endpunkte
  • Ermöglicht selektive Cross-Origin-Zugriffe durch deklarative CORS-Policies
  • Browser-enforced Origin-Validierung verhindert Manipulation durch Angreifer
  • Unterstützt Zero-Trust-Architekturen durch explizite Origin-Whitelisting
  • Kompatibel mit modernen API-Gateway-Security-Features und Rate-Limiting-Strategien

Spezifikation

Der Origin-Header ist in RFC 6454 (The Web Origin Concept) und der WHATWG Fetch Standard spezifiziert und bildet die Grundlage für Same-Origin-Policy und CORS-Mechanismen in modernen Web-APIs.

Weitere Spezifikationen

Access-Control-Allow-Origin Header, Host Header, Referer Header