プログラマーはどのような HTTP ステータス コードに注意する必要がありますか?
-
18-09-2019 - |
質問
それで、見てみると、 HTTPステータスコードのリスト, 、おそらくプログラミング中に役立つものがたくさんあるでしょう。サーバーはプロトコルなどのいくつかの処理を行う可能性がありますが、これらのコードの多くはブラウザにページの実際のステータスを伝えるのに役立つ可能性があります。
そこで、私の質問は、これらのステータス コードのどれに注意すべきでしょうか?送信するためにどれをチェックすべきか、また通常のアプリケーション プログラミングではどれが使用されない可能性が高いか。
興味があれば、これは PHP プログラミングの範囲内ですが、おそらく他の言語にも同様に当てはまるでしょう。
解決
これらの多くは、REST スタイルの API を使用する場合に本質的に役立ちます。例えば:
200 (OK): あなたはリソースを求めました。ここにあります!
201 (作成済み): 新しいリソースを作成するように頼まれました。やった!次回はこちらで質問させていただきます。
202 (承認済み): 何かをしてほしいと頼まれましたが、しばらく時間がかかるので、待たないでください。ここからステータスを確認することができます。
300 (複数選択): 何かを求めましたが、具体的ではありませんでした。これらのうちどれを意味していましたか?
301 (永久に移動): あなたは何かを求めましたが、それは今は別の場所にあります。ここが行き先です。
302 (見つかった): あなたは何かを求めましたが、それは今のところ別の場所にあります。ここにあります。
304 (未変更): この前に何かを求められましたが、最後に尋ねられたときからそれは変わっていません。
400不正な要求): あなたが私に頼んだことは何か間違っています。言ったことを修正して、もう一度試してください。
401 (不正): このリクエストを完了する前に、身元を明かしていただく必要があります。[注記:これは、残念ながら名前が付けられたヘッダーの 1 つです。本当はタイトル付けるべきなんだよな 未認証;403のほうが似てる 無許可.]
403禁止します): あなたは、持つことを許可されていないものを要求しました。
404お探しのページが見つかりませんでした): リソースを要求しましたが、説明に一致するリソースはありません。
500 (サーバーエラー): 問題が発生したため、現在はご要望に応じることができません。ごめんなさい。
501 (未実装): 現在そのようなリクエストには対応しておりません。
503 (サービス利用不可): 現在リクエストにはお答えできません。
他のヒント
より正確に言うと、これらは単なる HTTP ステータス コードであり、HTTP ヘッダーではありません。ヘッダーは多くのことを伝え、クライアントとサーバーの両方によって送信されますが、この回答の範囲を超えています。
HTTP ヘッダーの 1 つ、つまりサーバーからクライアントに送信される最初のヘッダーは次のようになります。
HTTP/1.x 200 OK
または:
HTTP/1.x 404 Not Found
プロトコル識別子の後に表示される番号 HTTP/1.x
これは、ステータス コードと呼ばれるもので、その後に対応するステータス メッセージが送信されます。私が PHP プログラミングをしていた頃に使用しなければならなかったステータス コードを以下に示します。
200 OK
最も一般的です。これは、すべてがうまく機能し、コンテンツで応答していることを意味します。404 Not Found
特定の条件下、特にリクエストによってサーバー上で見つからないスクリプトが実行される場合、サーバーによって自動的に送信されます。場合によっては、特に URI を特別な方法で処理するフレームワークを作成している場合は、手動で 404 ステータス コードを設定したくなることがあります。たとえば、中央で実行されるスクリプトが 1 つある場合、index.php
.htaccess または Apache 設定を使用してすべてのリクエストをルーティングしている間、Apache が自発的に 404 を返すことはほとんどありません。index.php
. 。しかし、明らかに、どこにもつながらない通信したい URI がいくつかあるため、独自の 404 ステータス ヘッダーを送信する必要があります。301 Moved Permanently
そして302 Found
(より一般的には「一時的に移動」と呼ばれます)。これら 2 つはブラウザに、Location
ヘッダーを作成し、そこで指定された URL にユーザーをリダイレクトします。ほとんどの PHP フレームワークには、HTTP リダイレクト用の独自の関数があり、ヘッダーも処理します。ネイティブ PHP リダイレクトheader('Location: http://www.google.com');
HTTP ステータスが自動的に 302 に変更されます。302 と 301 の違いについては詳しく理解したことがありませんが、検索エンジンの最適化には 301 の方がはるかに優れていると読んだので、常に 301 を使用するようにしています。おそらく他の誰かが正確な違いを理解できるでしょう。注意すべき点の 1 つは、POST データを受信することを目的としたページに 301/302 ステータスと Location ヘッダーを配置しないようにすることです。過去にそれで悩んだことがあります。304 Not Modified
通常、Apache の設定に応じて自動的に送信されます。通常の状態のほとんどのブラウザには、要求されたアイテムがユーザーのコンピュータにキャッシュされた日付/時刻が含まれています。ETag およびその他のヘッダーはこの目的に使用されます。サーバーの対応するファイルがそれ以来変更されていないと Apache が判断した場合、Apache は多くの場合、コンテンツのない 304 を送信します。これは、クライアントにキャッシュされたバージョンを使用するように指示するだけです。401 Unauthorized
ユーザーが Web サイト上の制限されたセクションにアクセスしようとすると送信されます。ネイティブのユーザー名/パスワード プロンプトをサポートする古い HTML 機能とサーバー テクノロジがいくつかありますが、プロンプトがキャンセルされた場合、または承認されなかった場合に 401 ステータス コードが送信されていました。最近では、ほとんどの人がユーザー認証と権限管理のために独自の PHP 実装を作成しているため、Apache が勝手に 401 を送信することはあまりありません。ページにアクセスするにはさらに多くの権限が必要であることを示すステータスを手動で送信できます。400 Bad Request
Apache が理解できないリクエストを受信した場合、Apache によって送信されます。通常、手動で送信することを心配する必要はありません。403 Forbidden
地理的、IP または禁止制限により、たとえ適切な認証があってもアクセスできないエリアにユーザーがアクセスしようとする場合に、一部の人々によって使用されます。私自身は使用せず、401 と 404 を使用して埋めるだけです。5xx
. 。500 シリーズは、開発者としては絶対に見たくないコードです。これは、コードまたはサーバーが何か悪いことをしたことを意味します。十分な性能のサーバーまたは負荷分散システムがあり、コードにエラーがない場合は、500 シリーズが表示されることはありません。
まあ、それらはステータスコード、ヘッダではないですが、(5xxのシリーズはなさそうであるが)、それらのいずれかが役に立つかもしれません。
私はあなたのためのヘッダを使用していずれかのファイルを提供するか、RESTfulなWebサービスを提供話してそれを取る?
これで、ステータスコードではなく、ヘッダの後になるだろう。私は一般的に使用されてきたものがあります:
200 OK
301 Moved Permanently
302 Found (temporary redirect)
400 Bad Request
403 Forbidden
404 Not found
500 Internal Server Error
もちろん、RESTfulなWebサービスのために、あなたはより説明だけでなく、体内の説明を提供するために、テキストを変更することができます。
次にあります:
418 I'm a teapot
そのリストをざっと見てみる (ステータスコードの), ここでは私がよく使うものを紹介します (私は仕事としてPHP Web開発を行っています) :
200 OK
:ほとんどの場合、Apache によって送信されます301 Moved Permanently
:通常は私によって送信されます (書き換えルールを使用する場合は Apache によって送信されます)。302 Found
:通常は私によって送信されます (書き換えルールを使用する場合は Apache によって送信されます)。304 Not Modified
:通常、Apache (またはその前のリバース プロキシ) によって送信されます。401 Unauthorized
:通常は Apache によって送信されます403 Forbidden
:通常は Apache によって送信されます404 Not Found
:Apache と私の両方から送信されました -- 状況に応じて410 Gone
:通常は私から送られてきます500 Internal Server Error
:Apache と私の両方から送信されました。これは、「技術的な」エラーが発生したときに、たとえそれが決して起こらないはずの場合でも、私が通常使用するものです^^
そして、ここに私が使用できるものがあります (特にRESTを実行している場合) :
私が最もよく使用したものは次のとおりです。
- 301 - 永続的に移動 - リソースが新しい URL に永続的に移動される場合にこれを使用します。
- 302 - 一時的に移動 - 永続的なリダイレクトができない場合のリダイレクトにこれを使用します。
- 404お探しのページが見つかりませんでした。無効な URL に対してこれを提供するようにサーバーを構成する必要があります。これらをログで監視する必要があります。404 が多すぎる場合は、プッシュが不適切であることを示します。
- 500内部サーバーエラー。エラーが発生した場合にこれらを適切に送信するようにサーバーを構成する必要があります。ログ内の 5xx エラーを監視する必要があります。