HTTPQUERY
Deutsch

103 Early Hints

Verwendung

Sendet ein Server 103 Early Hints, wertet der Client die Link-Header aus und ruft die angegebenen Ressourcen vorab ab. Das ist besonders dann nützlich, wenn der Server Zeit für die Verarbeitung der Anfrage benötigt, bevor er die endgültige Antwort zusammenstellt. Während der Server arbeitet, nutzt der Client die Zeit, um Stylesheets, Bilder oder Skripte zu laden, die die endgültige Seite benötigt.

Hinweis

Mehrere 103-Early-Hints-Antworten werden vor der endgültigen HTTP-Antwort gesendet.

Hinweise sind keine Garantien

In jedem System, das auf Vorhersagen beruht, schwankt die Treffergenauigkeit. Wenn ein Server 103 Early Hints zurückgibt und dem Client damit nahelegt, bestimmte Ressourcen abzurufen, beruht dieser Vorschlag auf einer plausiblen Annahme. Nur die endgültige HTTP-Antwort liefert maßgebliche Link-Header.

Die Diskrepanz zwischen den Hinweisen und den endgültigen Headern äußert sich auf zwei Arten: Entweder benötigt die endgültige Antwort zusätzliche Ressourcen, die in den Hinweisen nicht genannt wurden, oder als Early Hints abgerufene Ressourcen erweisen sich als überflüssig. Im letzteren Fall hat der Client zusätzliche Arbeit ohne Nutzen geleistet, und die Gesamtdauer der Transaktion steigt.

Auf Basis von Early Hints durchgeführte Operationen sind sicher. Die Verwendung einer GET-Methode verändert beispielsweise den Serverzustand nicht.

SEO-Auswirkung

103 Early Hints ist eine informatorische Antwort, die dem endgültigen Statuscode vorausgeht. Suchmaschinen-Crawler verarbeiten die endgültige Antwort, nicht die zwischengeschalteten informatorischen Antworten. Die Leistungsgewinne durch Early Hints gelten für Browser, nicht für Crawler. Der Statuscode kann gefahrlos eingesetzt werden und beeinträchtigt nicht, wie Google die Seite verarbeitet.

Server Push ersetzen

Der Mechanismus 103 Early Hints ist als Teil des Resource-Hints-Frameworks mit rel=preload dazu bestimmt, den Server-Push-Mechanismus in modernen Browsern zu ersetzen. Anders als Server Push ist 103 Early Hints nicht auf die endgültige Antwort angewiesen, bevor der Browser mit dem Abrufen der angegebenen Ressourcen beginnt.

Hinweis

Aus Sicherheitsgründen beschränken Browser die Verwendung von 103 Early Hints ausschließlich auf HTTP/2- und HTTP/3-Verbindungen.

Beispiel

Der Client fordert eine Datei index.html an, und der Server liefert drei Hinweise auf Ressourcen, die voraussichtlich benötigt werden. Die angeforderte Datei befindet sich nicht im Nachrichtenrumpf, weil der Server die Antwort noch erzeugt. Der Client beginnt, die von jeder Link-Direktive angegebenen Ressourcen zu laden.

Nach einer kurzen Verzögerung liefert der Server die endgültige 200-Antwort zusammen mit den offiziellen Link-Direktiven und index.html im Nachrichtenrumpf. Beachten Sie die Unterschiede zwischen den Early Hints und der endgültigen Ressourcenliste.

Anfrage

GET /index.html HTTP/1.1
Host: example.com

Antwort

HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </images/logo.svg>; rel=preload; as=image
Link: </videos/instructions_simple.mp4>; rel=preload; as=video

<there is a short pause in the transmission>
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 100
Link: </style.css>; rel=preload; as=style
Link: </images/logo.svg>; rel=preload; as=image
Link: </images/pro_badge.svg>; rel=preload; as=image
Link: </videos/instructions_advanced.mp4>; rel=preload; as=video

<message body will follow>

Die erste Early-Hint-Ressource, style.css, wird vom Client abgerufen und verarbeitet, ebenso das Logo-Bild und das Video instructions_simple.mp4. Sowohl das Stylesheet als auch das Logo sind unverändert verwendbar. Das Bild pro_badge aus der endgültigen Antwort taucht in den Hinweisen nicht auf, daher ruft der Client diese Ressource erst nach Erhalt der endgültigen Antwort ab.

Das Video instructions_advanced.mp4 in den endgültigen Link-Headern weicht vom Early Hint ab. Der Server hatte über die Early Hints instructions_simple.mp4 vorgeschlagen, der Abruf war jedoch unnötig. Das neu angegebene Video muss weiterhin abgerufen und verarbeitet werden, bevor index.html vollständig gerendert wird, was die Ladezeit vermutlich erhöht, weil zwei Videos statt eines abgerufen wurden.

Code-Referenzen

.NET

HttpStatusCode.EarlyHints

Rust

http::StatusCode::EARLY_HINTS

Rails

:early_hints

Go

http.StatusEarlyHints

Symfony

Response::HTTP_EARLY_HINTS

Python3.9+

http.HTTPStatus.EARLY_HINTS

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_EARLY_HINTS

Angular

@angular/common/http/HttpStatusCode.EarlyHints