Fetch API - Was nutzt Redirect: Manuell

8

Ich habe kürzlich mit der JavaScript Fetch API gespielt. Soweit ich weiß, werden standardmäßig alle Weiterleitungen transparent behandelt und am Ende bekomme ich eine Antwort vom letzten Anruf in der Redirect-Kette.

Allerdings konnte ich fetch mit {redirect: 'manual'} aufrufen, in diesem Fall würde es eine opaqueredirect-Antwort ohne brauchbare Informationen zurückgeben. Von Ссылка

  

Eine opak-redirect-gefilterte Antwort   ist eine gefilterte Antwort, deren Typ "opaqueredirect" ist, Status ist 0, Statusnachricht ist die leere Bytefolge, Headerliste ist leer, Body ist null und Trailer ist leer.

Ссылка sagt, dass eine Antwort opaqueredirect wird, wenn redirect auf 'manual' gesetzt ist:

  

Umleitungsmodus der Anfrage einschalten:
  ...
  - Handbuch
  Setzen Sie die Antwort auf eine opak-redirect-gefilterte Antwort, deren interne Antwort actualResponse ist.

Die Spezifikation sagt auch:

  

Mit anderen Worten, eine undurchsichtige gefilterte Antwort und eine undurchsichtig-redirect-gefilterte Antwort sind fast nicht von einem Netzwerkfehler zu unterscheiden.

Warum sollte man sich bei Verwendung der Fetch-API auf "manual" umleiten? Für mich scheint es ziemlich nutzlos. Gibt es Anwendungsfälle, in denen dies sinnvoll wäre?

    
civilu 10.03.2017, 10:27
quelle

1 Antwort

5

Ich denke, die kurze Antwort ist: es sei denn, Sie tun etwas mit Service-Arbeiter-Code wie Ссылка beschreibt, dass du niemals redirect: 'manual' willst.

Längere Antwort:

Die HTML-Spezifikation scheint Browser zu erfordern den Umleitungsmodus anfänglich auf manual zu setzen, wenn der Browser anfängt, zu einer Ressource zu navigieren, bevor dann ... (re) es mit Umleitungsmodus unset gemacht wird? (In diesem Fall wird standardmäßig auf follow zurückgesetzt.) Ich verstehe nicht, warum der Algorithmus in der Spezifikation dies tut, aber denke, es muss etwas damit zu tun haben, den Fall zu behandeln, in dem die Navigation fehlschlägt. Egal, ich glaube, das ist die einzige Verwendung in jeder Spezifikation für den manual Redirect-Modus.

Wie auch immer, die Fetch-API ist so konzipiert, dass sie dieselben Grundelemente wie Browser bereitstellt, aber das bedeutet nicht, dass diese Grundelemente im Web-App-Code immer gut verwendet werden (im Gegensatz zu den Browsern selbst) Machen Sie die Primitiven).

Also denke ich, dass die Fetch-Spezifikation voraussetzt, dass, obwohl Sie die API mit redirect: 'manual' aufrufen könnten, die Browser das werfen würden, wenn Sie das getan hätten - ich denke, da hat noch niemand etwas vorgeschlagen ein gültiger Grund dafür, dass er für andere Fälle als Browser, die Navigationen durchführen, festgelegt wird.

Aber dieses Verhalten scheint sich aufgrund von Ссылка geändert zu haben, das einen (Ecken-) Fall beschreibt, in dem% co_de steht % wird in Service-Worker-Code benötigt.

Ein ähnlicher Fall von etwas, das Sie in der Fetch-API festlegen können, aber mit sehr geringem Nutzen im Web-App-Code ist redirect: 'manual' . Das wurde ursprünglich hinzugefügt, nur weil Browser es für bestimmte Anforderungen verwenden, sodass die Fetch-API es verfügbar macht. Aber das ist ein weiterer Fall, der nur für Servicemitarbeiter von begrenztem Nutzen ist - für das Zwischenspeichern von Antworten, um sie später wiederzugeben, ohne dass die Antworten untersucht werden müssen ( mode: 'no-cors' verhindert, dass Web-App-Code ausgeführt wird).

    
sideshowbarker 10.03.2017, 11:32
quelle