javascript - with - Welche Einschränkungen gelten für undurchsichtige Antworten?



vanilla js fetch (1)

Zugriff auf Kopfzeilen / Text von undurchsichtigen Antworten

Die einfachste Einschränkung bei undurchsichtigen Antworten besteht darin, dass Sie keine aussagekräftigen Informationen aus den meisten properties der Response Klasse wie z. B. headers abrufen oder die verschiedenen methods aufrufen methods , aus denen sich die Body Schnittstelle zusammensetzt, z. B. json() oder text() . Dies entspricht dem Black-Box-Charakter einer undurchsichtigen Reaktion.

Verwenden undurchsichtiger Antworten als Ressourcen auf einer Seite

Undurchsichtige Antworten können als Ressource auf einer Webseite verwendet werden, wenn der Browser die Verwendung einer Nicht-CORS-Cross-Origin-Ressource zulässt. Hier ist eine Untergruppe von Elementen, für die ursprungsübergreifende Nicht-CORS-Ressourcen und daher undurchsichtige Antworten gültig sind, angepasst aus der Mozilla Developer Network-Dokumentation :

  • <script>
  • <link rel="stylesheet">
  • <img> , <video> und <audio>
  • <object> und <embed>
  • <iframe>

Ein bemerkenswerter Anwendungsfall, für den undurchsichtige Antworten nicht gültig sind , betrifft Schriftressourcen .

Überprüfen Sie im Allgemeinen die entsprechenden Spezifikationen, um festzustellen, ob Sie eine undurchsichtige Antwort als bestimmten Ressourcentyp auf einer Seite verwenden können. In der HTML-Spezifikation wird beispielsweise erläutert, dass nicht CORS-konforme (dh undurchsichtige) Antworten für <script> -Elemente verwendet werden können, allerdings mit einigen Einschränkungen, um das Weiterleiten von Fehlerinformationen zu verhindern.

Undurchsichtige Antworten und die Cache-Speicher-API

Eine "GOTCHA", auf die Entwickler möglicherweise mit undurchsichtigen Antworten stoßen, besteht darin, sie mit der Cache-Speicher-API zu verwenden . Zwei Hintergrundinformationen sind relevant:

  • Die status einer undurchsichtigen Antwort wird immer auf 0 , unabhängig davon, ob die ursprüngliche Anforderung erfolgreich war oder fehlgeschlagen ist.
  • Die Methoden add() / addAll() Cache-Speicher-API lehnen beide ab, wenn die Antworten, die aus einer der Anforderungen resultieren, einen Statuscode aufweisen, der nicht im 2XX-Bereich liegt .

Aus diesen beiden Punkten folgt, dass die Anforderung, die als Teil des Aufrufs add() / addAll() , keine undurchsichtige Antwort addAll() und nicht zum Cache hinzugefügt werden kann.

Sie können dies umgehen, indem Sie explizit eine fetch() put() Methode ausführen und dann die put() Methode mit der undurchsichtigen Antwort aufrufen. Auf diese Weise stimmen Sie dem Risiko zu, dass die zwischengespeicherte Antwort ein Fehler ist, der von Ihrem Server zurückgegeben wird.

const request = new Request('https://third-party-no-cors.com/', {mode: 'no-cors'});
// Assume `cache` is an open instance of the Cache class.
fetch(request).then(response => cache.put(request, response));

Undurchsichtige Antworten und die navigator.storage-API

Um den Verlust domänenübergreifender Informationen zu vermeiden, wird die Größe einer undurchsichtigen Antwort, die zum Berechnen der Speicherkontingentgrenzen verwendet wird (dh ob eine QuotaExceeded Ausnahme ausgelöst wird) und von der navigator.storage API gemeldet.

Die Details dieser Auffüllung variieren von Browser zu Browser. Für Google Chrome bedeutet dies jedoch, dass die Mindestgröße , die eine einzelne zwischengespeicherte undurchsichtige Antwort zur gesamten Speichernutzung beiträgt, ungefähr 7 Megabyte beträgt. Sie sollten dies berücksichtigen, wenn Sie festlegen, wie viele undurchsichtige Antworten Sie zwischenspeichern möchten, da Sie die Speicherquotenbeschränkungen aufgrund der tatsächlichen Größe der undurchsichtigen Ressourcen viel schneller überschreiten können, als Sie dies normalerweise erwarten.

https://code.i-harness.com

Undurchsichtige Antworten werden als Teil der Abruf-API definiert und stellen das Ergebnis einer Anforderung an einen fernen Ursprung dar, wenn CORS nicht aktiviert ist.

Welche praktischen Einschränkungen und "Fallstricke" gibt es, wenn es darum geht, wie undurchsichtige Antworten sowohl in JavaScript als auch als Ressourcen auf einer Seite verwendet werden können?





fetch-api