Ich schreibe gerade eine Webanwendung mit angularjs, aber ich denke, diese Frage gilt für jedes clientseitige JavaScript-Framework, das auf Client-Seite Routing durchführt (as angular does).In einer Einzelseiten-App, was ist der richtige Weg, um mit falschen URLs umzugehen (404 Fehler)?
In einer einseitigen App, was ist der richtige Weg, um mit falschen URLs umzugehen?
Mit Blick auf einige wichtige Websites, sehe ich, dass Google Mail in den Posteingang umleiten wird, wenn Sie eine beliebige URL unter https://mail.google.com/mail/ eingeben. Dies geschieht serverseitig (mit einem HTTP-Code von 300) oder clientseitig, je nachdem, ob der falsche Pfad vor oder nach dem # -Zeichen liegt. Auf der anderen Seite zeigt Twitter ein echtes HTTP 404 für jede ungültige URL. Eine dritte Option wäre, eine "weiche" 404, eine rein clientseitige Fehlerseite, anzuzeigen.
Diese Lösungen scheinen für verschiedene Situationen geeignet. Twitter möchte, dass die Links zu Twitter-Nutzern und Tweets echte Links sind, so dass Leute sie teilen, in News-Artikeln veröffentlichen können, also ist es wichtig, dass ungültige Links als solche erkannt werden (wenn ich einen Link zu einem Tweet unterbrochen habe) Meine Website, eine einfache Crawl wird mir das sagen). In Google Mail hingegen wird nicht erwartet, dass Sie Links in Ihren Posteingang teilen. Ich bin mir nicht einmal sicher, ob die Links wirklich permanent/persistent sind: es scheint, dass die Aktualisierung der URL hauptsächlich der Browsernavigation dient Einzelseiten-App. Der dritte Ansatz, weiche Fehler zu geben, könnte für Situationen ähnlich wie Google Mail geeignet sein, aber wo es keine vernünftige "Standard" -Seite gibt.
Nach dieser langen Einführung, sind hier einige spezifische Fragen:
- Ist es überhaupt akzeptabel, eine „weiche“ Fehlerseite anstelle eines 404-Fehler zu geben, oder sollte eine Einzelseiten-App umleiten immer ein real 404 wenn eine URL ungültig ist?
- Der Code von Google Mail ist möglicherweise fehlerfrei, aber wenn ein Fehler zu ungültigen Links führt, die in den Posteingang zurückgeleitet werden, ist das für Benutzer möglicherweise noch verwirrender als eine Fehlerseite. Für die meisten Web-Apps, die nicht so gut getestet sind wie Google Mail, wäre es besser, eine Fehlerseite zu zeigen?
- Um echte 404 für einseitige Anwendungen zu implementieren, scheint es notwendig, die Routing-Logik auf der Serverseite zu duplizieren. Gibt es einen Weg dazu?
- Bei der Weiterleitung zu einem 404 sollte der Benutzer die URL sehen können, die den Fehler verursacht hat, möglicherweise in der URL-Leiste. Mit der html5-History-API glaube ich, dass dies erreicht werden kann, indem einfach ein erneutes Laden der aktuellen Seite (mit der falschen URL) ausgelöst wird, kombiniert mit dem oben erwähnten serverseitigen Routing. Für Browser, die dies nicht unterstützen oder wenn die Hashbang-Notation verwendet wird, scheint dies nicht möglich. Was ist der beste Weg, um alle Browser zu unterstützen?
Funktioniert Ihre Website sogar ohne Javascript? Verwenden Sie "history.pushState", um die URLs über Javascripts oder Segmente in der URL zu aktualisieren? –
Warum redest du auch * umleiten * zu einem 404, warum nicht einfach * zeigen * einen? –
@markus Die Seite, an der ich gerade arbeite, funktioniert nicht ohne Javascript. Aber ich möchte, dass Deep-Linking funktioniert, damit Benutzer Links auf die Site teilen können (normalerweise per E-Mail). Ich benutze jetzt Hashbang-Notation, aber angularjs macht es einfach, zu html5 pushState zu wechseln, wenn ich will/muss. – jssebastian