Attualmente sto scrivendo un'applicazione web usando angularjs, ma penso che questa domanda si applica a qualsiasi framework javascript lato client che esegue il routing sul lato client (as angular does).In un'applicazione a singola pagina, qual è il modo giusto per gestire URL errati (errori 404)?
In un'applicazione a pagina singola, qual è il modo giusto per gestire gli URL sbagliati?
Guardando alcuni siti importanti, vedo che gmail reindirizzerà la posta in arrivo se si digita un URL casuale sotto https://mail.google.com/mail/. Questo accade sul lato server (con un codice http 300) o lato client, a seconda che il percorso sbagliato sia prima o dopo il carattere #. D'altra parte, Twitter mostra un vero HTTP 404 per qualsiasi URL non valido. Una terza opzione sarebbe quella di mostrare un "soft" 404, una pagina di errore puramente lato client.
Queste soluzioni sembrano appropriate per diverse situazioni. Twitter vuole che i link per Twitter utenti e tweet siano collegamenti reali, quindi le persone possono condividerli, postarli in articoli di notizie, ecc., Quindi è importante che i link non validi siano riconosciuti come tali (se ho un link interrotto a un tweet in il mio sito web, una semplice ricerca per indicizzazione lo dirà). In Gmail, d'altra parte, non ci si aspetta che tu condivida i link nella tua casella di posta, e non sono nemmeno sicuro che i link siano permanenti/persistenti: sembra che l'aggiornamento dell'URL abbia principalmente lo scopo di navigare nella cronologia del browser all'interno del app a pagina singola. Il terzo approccio di dare errori soft potrebbe essere appropriato per situazioni simili a gmail, ma dove non esiste una pagina "predefinita" ragionevole.
Dopo questa lunga premessa, qui ci sono alcune domande specifiche:
- E 'mai accettabile per dare una pagina di errore "soft" al posto di un errore 404, o dovrebbe una singola pagina app reindirizzare sempre ad un vero 404 se un URL non è valido?
- Il codice di Gmail può essere perfettamente privo di errori, ma se ha un errore che porta a link non validi che finiscono per reindirizzare nuovamente alla posta in arrivo, ciò potrebbe essere ancora più confuso per gli utenti di una pagina di errore. Per la maggior parte delle app Web disponibili, che non sono testate come Gmail, sarebbe meglio mostrare una pagina di errore?
- Per implementare real 404 per applicazioni a pagina singola, sembra necessario duplicare la logica di routing sul lato server. C'è un modo per aggirare questo?
- Durante il reindirizzamento a un 404, penso che l'utente dovrebbe essere in grado di vedere l'URL che ha causato l'errore, probabilmente nella barra degli indirizzi. Con l'API della cronologia html5, penso che ciò possa essere ottenuto semplicemente attivando un ricaricamento della pagina corrente (con l'URL errato), combinato con il routing sul lato server sopra menzionato. Per i browser che non supportano questo o quando si utilizza la notazione hashbang, questo non sembra possibile. Qual è il modo migliore per supportare tutti i browser?
Il tuo sito web funziona anche senza javascript? Stai utilizzando history.pushState per aggiornare gli URL tramite javascript o segmenti nell'URL? –
Inoltre, perché stai parlando di * reindirizzamento * a un 404, perché non solo * mostra * uno? –
@markus Il sito al momento sto lavorando non funziona senza javascript. Ma io voglio che il deep-linking funzioni, così gli utenti possono condividere i link all'interno del sito (di solito, questo sarebbe via email). Sto usando la notazione hashbang per ora, ma angularjs rende facile passare a html5 pushState se voglio/ho bisogno di. – jssebastian