Upgrade
Verwendung
Der Header Upgrade ermöglicht die Protokollaushandlung auf einer bestehenden HTTP/1.1-Verbindung. Ein Client sendet diesen Header, um den Wechsel zu einem anderen Protokoll vorzuschlagen, und der Server stimmt entweder mit einer Antwort 101 Switching Protocols zu oder ignoriert die Anfrage und setzt mit dem aktuellen Protokoll fort.
Gängige Upgrade-Ziele sind WebSocket (websocket), TLS (TLS/1.2, TLS/1.3) und HTTP/2 im Klartext (h2c). Das WebSocket-Upgrade ist in modernen Umgebungen die am weitesten verbreitete Form und ermöglicht Vollduplex-Kommunikation zwischen Browsern und Servern.
Zusätzlich zu Upgrade ist der Header Connection erforderlich. Der Sender setzt Connection: upgrade, um Zwischenstationen zu signalisieren, die Upgrade-Anfrage weiterzuleiten, statt die Verbindung selbst zu übernehmen.
Ein Server sendet Upgrade außerdem als Teil einer Antwort 426 Upgrade Required. Damit teilt er dem Client mit, dass er die Anfrage mit dem aktuellen Protokoll nicht verarbeiten will, und nennt das erforderliche Protokoll im Wert von Upgrade.
Hinweis
Der Header Upgrade gilt ausschließlich für HTTP/1.1. HTTP/2 und HTTP/3 verwenden für die Protokollauswahl ALPN (Application-Layer Protocol Negotiation) während des TLS-Handshakes.
websocket
Hebt die Verbindung auf das WebSocket-Protokoll für Vollduplex-Kommunikation an. Der Client sendet zusammen mit der Upgrade-Anfrage die Header Sec-WebSocket-Key und Sec-WebSocket-Version.
h2c
Hebt die Verbindung auf HTTP/2 im Klartext (ohne TLS) an. Der Client sendet dabei den Header HTTP2-Settings, der die HTTP/2-Verbindungsparameter base64url-kodiert enthält.
TLS/1.2, TLS/1.3
Hebt eine unverschlüsselte HTTP-Verbindung auf eine TLS-gesicherte Verbindung an. Dieser Mechanismus ist weniger gebräuchlich als der direkte Aufbau von TLS.
Beispiel
Ein Client fordert ein WebSocket-Upgrade an. Der Server stimmt zu, indem er mit 101 Switching Protocols antwortet und das neue Protokoll bestätigt.
GET /chat HTTP/1.1
Host: example.re
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Ein Client schlägt ein Upgrade auf HTTP/2 im Klartext vor. Der Header HTTP2-Settings führt die anfänglichen HTTP/2-Parameter im base64url-Format kodiert mit.
GET / HTTP/1.1
Host: example.re
Connection: upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA
Ein Server verlangt vom Client die Verwendung eines anderen Protokolls. Die Antwort 426 Upgrade Required enthält den Header Upgrade mit dem akzeptablen Protokoll.
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3
Connection: upgrade