リクエストが常に 404 になるのはなぜですか?

伊谢尔伦
リリース: 2016-11-21 13:45:52
オリジナル
2509 人が閲覧しました

今回は404についてお話します。なぜなら、公式アカウントと QQ グループのバックグラウンドで、人々が同じ質問をしているからです。

私のアプリケーションはデプロイされており、バックグラウンドで起動しても異常な出力は見られませんでした。 Tomcat のマネージャーにリクエストすることはできますが、自分のアプリケーションをリクエストすると常に 404 が返されるのはなぜですか?

ええ、なぜですか?

この問題の説明を分析してみましょう。

1. アプリケーションはデプロイされており、バックグラウンドで異常な出力はありません。

2. Tomcat のマネージャー アプリケーションは正常にリクエストできます

上記の 2 点は、Tomcat が正常に起動し、同時にマネージャー アプリケーションとユーザーのアプリケーションが正常にデプロイされていることを示すだけですが、マネージャーのリクエストは正常であり、そうではありませんあなた自身のアプリケーションも正常であることを保証します。

結局のところ、あなたのアプリ内リソースが何であるかは管理者とは何の関係もなく、リクエストした際のアドレスが間違っている可能性すらあります。つまり、webapps ディレクトリにデプロイされたアプリケーションを監視していますが、ブラウザーでのリクエストは停止することなく常に 404 を返します。

上記の質問が当記事の主な分析内容です。まず、Wikipedia に記載されている 404 HTTP リクエストのステータス コードを見てみましょう:

HTTP エラー メッセージ 404 (Not Found) は、コンピュータ ネットワーク通信における標準の応答コードで、クライアントが通信できることを示します。しかし、サーバーはクライアントが要求したリソースを見つけることができません。

Tomcat では、多くの状況で 404 が返されます。

Tomcat には 2 つのデフォルトのサーブレット、

JspServlet、DefaultServlet が含まれていることは前の記事で述べました。 (Tomcat は静的リソースにどのように応答するのでしょうか?)

次の存在しない 2 つのリソースなど、Tomcat に存在しないリソースをランダムにリクエストした場合:

http://localhost:8080/abc と http: // localhost:8080/abcd.jsp

このとき、上記の 2 つのサーブレットがリクエストされます。現時点ではリソースが存在しないため、戻り値 404 は期待どおりです。

リクエストが常に 404 になるのはなぜですか?
たとえば、DefaultServlet はリクエストを処理するときに、現在リクエストされているリソースが Resource に存在するかどうかを確認します。

ここでキャッシュは現在のアプリケーションのすべてのリソースコンテンツを記録するために使用されます。

はリソース内で見つかりません。下の図は、Tomcat ルート アプリケーション内のリソースを示しています
リクエストが常に 404 になるのはなぜですか?

ここでステータスとメッセージを設定した後、エラー ページの表示はさまざまなステータス コードに基づいて終了します。別のページに対応することができます。ここでは Tomcat エラー ページを示します。前の記事で特定の実装を分析しました。 (あなたのエラー ページです。いいえ、あなたのエラー ページです)


別の状況を分析してみましょう:

たとえば、マネージャー アプリケーションをリクエストするとき、アプリケーション名は Manager または manageR として記述されます。このとき、プロセスは実際には上記と同様に、このアプリケーション名はこのアプリケーションのリソースとして認識されて処理されるため、そのようなリソースが存在しない場合は当然 404 が返されます。

別の状況を見てください:

マネージャーアプリケーションの下にエラーページ404.jspがありますが、次のフォームで直接リクエストしても404が返されます

http://localhost:8080/manager/ WEB -INF/jsp/404.jsp


これが Tomcat のディレクトリ アクセスの制限であることは誰もが知っています。 (WEB-INF ディレクトリについてどれくらい知っていますか)

別のページを見てみましょう:
アプリケーション内の特定のページは、index.jsp 内にあると仮定すると、基本的に別のページにジャンプします。sendRedirect を使用すれば問題ありません。転送後に特定のパス情報が表示されます。ただし、forward が使用されていると仮定すると、この時点では、転送したページは存在しません。すべてのリクエストは 404 になりますが、リクエストしたページは明らかにディレクトリ内に静かに存在していることがわかります。

そのため、リクエストが 404 を返した場合は、ケースバイケースで状況を分析して、具体的な原因が何か、本当にリソースが見つからないのか、それとも他の理由があるのか​​を確認する必要があります。 。

404 が表示されるたびに、同じ 404 エラー ページに対応する複数のエラー コードを設定している可能性もあります。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!