Signatur
Beschreibung
Die schreibgeschützte Eigenschaft responseStatus eines PerformanceResourceTiming-Eintrags enthält den HTTP-Statuscode der Antwort, mit der eine Ressource geladen wurde, zum Beispiel 200 für Erfolg, 404 für „nicht gefunden“ oder 500 für Serverfehler.
Bisher kam man über die Resource-Timing-API nur an Zeitmessungen und Größen. Mit responseStatus lassen sich fehlgeschlagene Ladevorgänge von Bildern, Skripten, Stylesheets, Schriften oder fetch()-Aufrufen erkennen, ohne jede Anfrage selbst abzufangen. Das ist besonders für Real User Monitoring (RUM) nützlich: Man sammelt fehlerhafte Ressourcen im Feld und schickt sie an einen Analyse-Endpunkt.
Da PerformanceNavigationTiming von PerformanceResourceTiming erbt, gibt es die Eigenschaft auch für das Hauptdokument. So lässt sich zum Beispiel feststellen, ob eine Seite selbst mit einem 404-Status ausgeliefert wurde.
Wichtig: Bei ursprungsübergreifenden Ressourcen ohne CORS ist der Wert 0, damit keine Informationen über fremde Server nach außen gelangen.
Rückgabewert
200, 301, 404). 0, wenn der Status nicht offengelegt werden darf (ursprungsübergreifend ohne CORS) oder kein HTTP-Status vorliegt.Beispiele
Statuscodes aller geladenen Ressourcen auflisten
const entries = performance.getEntriesByType('resource');
for (const entry of entries) {
console.log(`${entry.responseStatus} ${entry.name}`);
}
Fehlerhafte Ressourcen per PerformanceObserver melden
const observer = new PerformanceObserver((list) => {
const failed = list.getEntries().filter(
(e) => e.responseStatus >= 400
);
for (const entry of failed) {
navigator.sendBeacon('/rum/errors', JSON.stringify({
url: entry.name,
status: entry.responseStatus,
type: entry.initiatorType
}));
}
});
observer.observe({ type: 'resource', buffered: true });
Status des Hauptdokuments prüfen (mit Fallback)
const [nav] = performance.getEntriesByType('navigation');
if (nav && 'responseStatus' in nav) {
if (nav.responseStatus === 404) {
console.warn('Seite wurde mit 404 ausgeliefert');
} else {
console.log('Dokument-Status:', nav.responseStatus);
}
} else {
console.log('responseStatus wird nicht unterstützt');
}
Ursprungsübergreifende Ressourcen ohne CORS erkennen
const opaque = performance
.getEntriesByType('resource')
.filter((e) => e.responseStatus === 0);
console.log(`${opaque.length} Ressourcen ohne sichtbaren Status`);
opaque.forEach((e) => console.log(e.name));
// Wichtig · Fallstricke
- Browser-Unterstützung: Bisher nur in Chromium-Browsern (Chrome, Edge, Opera ab Version 109). Firefox und Safari unterstützen die Eigenschaft derzeit nicht. Vor der Nutzung mit
'responseStatus' in entryprüfen, denn sonst ist der Wertundefined. - Wert
0: Bei ursprungsübergreifenden Ressourcen ohne CORS-Freigabe liefert die Eigenschaft0. Dort hilft auchTiming-Allow-Originnicht, denn der Status wird nur offengelegt, wenn die Antwort den CORS-Check besteht (z. B.<img crossorigin>plusAccess-Control-Allow-Origin).0bedeutet also nicht automatisch einen Netzwerkfehler. - Netzwerkfehler: Scheitert eine Anfrage ganz (DNS-Fehler, Verbindungsabbruch), gibt es je nach Browser gar keinen Eintrag oder einen mit Status
0. Für eine vollständige Fehlererkennung sollte man zusätzlicherror-Events oderfetch-Fehlerbehandlung nutzen. - Weiterleitungen und Cache: Angegeben wird der Status der endgültigen Antwort nach allen Weiterleitungen. Kommt die Ressource aus dem HTTP-Cache, steht dort in der Regel der gespeicherte Status (meist
200). - Puffergröße: Der Puffer für Resource-Timing-Einträge ist begrenzt (Standard: 250 Einträge). Bei vielen Ressourcen
PerformanceObserververwenden oder mitperformance.setResourceTimingBufferSize()vergrößern.