私は現在、angularjsを使用してWebアプリケーションを作成していますが、この質問は、クライアント側でルーティングを行うクライアント側のjavascriptフレームワークに当てはまると思います( angularが行うように)。
単一ページのアプリで、間違った URL を処理する正しい方法は何ですか?
いくつかの主要なサイトを見ると、https://mail.google.com/mail/の下にランダムな URL を入力すると、gmail が受信トレイにリダイレクトされることがわかります。これは、間違ったパスが # 文字の前後にあるかどうかに応じて、サーバー側 (http 300 コードを使用) またはクライアント側で発生します。一方、twitter は無効な URL に対して実際の HTTP 404 を表示します。3 番目のオプションは、純粋にクライアント側のエラー ページである「ソフト」404 を表示することです。
これらのソリューションは、さまざまな状況に適しているようです。Twitter は、Twitter ユーザーへのリンクとツイートが実際のリンクであることを望んでいるため、人々はそれらを共有したり、ニュース記事に投稿したりできます。そのため、無効なリンクがそのように認識されることが重要です (私のウェブサイトでは、単純なクロールでそれがわかります)。一方、gmail では、リンクを受信トレイに共有することは想定されていません。また、リンクが本当に永続的/永続的であるかどうかもわかりません。シングルページアプリ。ソフト エラーを与える 3 番目のアプローチは、gmail と同様の状況に適している可能性がありますが、合理的な「デフォルト」ページはありません。
この長い紹介の後、いくつかの具体的な質問があります。
- 404 エラーの代わりに「ソフト」エラー ページを表示することは許容されますか? または、URL が無効な場合、単一ページのアプリは常に実際の 404 にリダイレクトする必要がありますか?
- Gmail のコードには完全にバグがないかもしれませんが、受信トレイにリダイレクトされる無効なリンクにつながるバグがあった場合、エラー ページよりもユーザーを混乱させる可能性があります。gmail ほど十分にテストされていないほとんどの Web アプリでは、エラー ページを表示した方がよいでしょうか?
- シングルページ アプリに実際の 404 を実装するには、サーバー側でルーティング ロジックを複製する必要があるようです。これを回避する方法はありますか?
- 404 にリダイレクトする場合、ユーザーはエラーの原因となった URL をおそらく URL バーで確認できるはずです。html5 history api を使用すると、上記のサーバー側のルーティングと組み合わせて、現在のページのリロードを (間違った URL で) トリガーするだけでこれを達成できると思います。これをサポートしていないブラウザーや、ハッシュバン表記を使用している場合、これは不可能のようです。すべてのブラウザをサポートする最善の方法は何ですか?