Zum Hauptinhalt springen

navigation_failed

HTTP 422 · code: "navigation_failed" · type: https://docs.formfeed.dev/errors/navigation-failed

Ein url-Rendering konnte die Seite, die es nennt, nicht laden. Das Rendering wird als fehlgeschlagen aufgezeichnet und kostet nichts. detail nennt den Grund, oft mit der Meldung des Browsers selbst.

Beispiel​

{
"type": "https://docs.formfeed.dev/errors/navigation-failed",
"title": "Navigation failed",
"status": 422,
"detail": "URL returned HTTP 404",
"code": "navigation_failed",
"location": null,
"render_id": "rnd_7da09ab6cd9946b798c187c2a9350852",
"request_id": "req_4b7c1e9a2f3d4c5b8a6e7f9012"
}

Häufige Ursachen​

  • Die Seite antwortete mit einem HTTP-Fehler, 400 oder höher (URL returned HTTP 404).
  • Die Seite war nicht innerhalb von 30 Sekunden fertig geladen. Standardmäßig wartet Formfeed, bis das Netzwerk ruht; eine Seite, die ständig nachfragt, streamt oder eine Verbindung offen hält, kommt nie dorthin, und das Problem sagt Timeout 30000ms exceeded.
  • Eine http:-Adresse. Die API nimmt sie an, aber der Browser lädt nur https (scheme http: is not allowed).
  • Der Hostname lässt sich nicht auflösen, oder er löst auf eine private oder interne Adresse auf (URL blocked: dns failure: …, URL blocked: resolves to private address …). Adressen, die schon dem Aussehen nach privat sind, werden früher abgelehnt, mit invalid_request.
  • Das TLS-Zertifikat ist ungültig oder abgelaufen, oder der Server hat die Verbindung abgewiesen (net::ERR_CERT_…, net::ERR_CONNECTION_REFUSED).
  • Eine Weiterleitung auf eine Adresse, die Formfeed nicht abruft.
  • Die Seite verlangt eine Anmeldung oder blockiert automatisierte Browser und antwortet mit einer Fehlerseite oder einem Fehlerstatus. Ein url-Rendering sendet keine Cookies und keine Header von Ihnen.

So beheben Sie es​

  • Öffnen Sie die URL in einem privaten Browserfenster von außerhalb Ihres Netzwerks.
  • Setzen Sie bei Seiten, die eine Verbindung offen halten, waitFor.networkIdle auf false: Die Seite wird dann direkt nach ihrem load-Ereignis gedruckt. Ergänzen Sie waitFor.selector, wenn ihr Inhalt später kommt.
  • Rendern Sie Seiten, die eine Anmeldung brauchen, stattdessen aus HTML: Holen Sie den Inhalt selbst und senden Sie ihn als html.

Wiederholen?​

Nur, wenn die Seite selbst ein vorübergehendes Problem hatte (eine 5xx-Antwort, eine Zeitüberschreitung eines langsamen Servers). Sonst erhält dieselbe Anfrage dieselbe Antwort. Senden Sie die Wiederholung mit einem neuen Idempotency-Key oder ohne: Eine 4xx-Antwort wird 24 Stunden unter ihrem Schlüssel gespeichert, der alte Schlüssel liefert also wieder dieses Problem. Siehe Wiederholen. Asynchrone Renderings wiederholt die Warteschlange bei diesem Code nicht.