HTTPヘッダーとはHTTP は「Hypertext Transfer Protocol」の略です。このプロトコルは World Wide Web 全体で使用されています。この記事のように、ブラウザに表示されるコンテンツのほとんどが http プロトコル経由で送信されます。 HTTP ヘッダーは HTTP リクエストとレスポンスの中核であり、クライアント ブラウザー、リクエストされたページ、サーバーなどの情報を伝えます。 例ブラウザのアドレス バーに URL を入力すると、ブラウザは次のような HTTP リクエストを送信します。 リクエストが完了すると、ブラウザは次の HTTP 応答を受信する場合があります。 最初の行は「ステータス ライン」と呼ばれ、その後に http ヘッダーが続き、空白行の後に出力が始まります (この場合は、HTML 出力)。 ただし、ページ ソースを表示すると、HTTP ヘッダーは表示されません。ただし、表示可能な内容とともに HTTP ヘッダーがブラウザーに送信されます。 この HTTP リクエストは、画像、CSS ファイル、JS ファイルなどの他のリソースを受信するためのリクエストも送信します。 以下で詳細を見てみましょう。 HTTPヘッダーの表示方法次の Firefox 拡張機能は、HTTP ヘッダーの分析に役立ちます。 1.放火魔 2.ライブHTTPヘッダー 3. PHPの場合:
この記事の下に、PHP を使用したいくつかの例を示します。 HTTP リクエスト構造最初の行は「最初の行」と呼ばれ、次の 3 つの部分で構成されます。
残りの行はそれぞれ「名前:値」のペアです。これらには、リクエストとブラウザに関するさまざまな情報が含まれています。たとえば、「User-Agent」は、使用しているブラウザのバージョンとオペレーティング システムを示します。 「Accept-Encoding」は、ブラウザが gzip などの圧縮された出力を受け入れることができることをサーバーに伝えます。 これらのヘッダーのほとんどはオプションです。 HTTP リクエストは次のように短縮することもできます。 そして、サーバーから有効な応答が引き続き受信されます。 リクエストタイプ最も一般的な 3 つのリクエスト タイプは、GET、POST、HEAD です。最初の 2 つは、HTML を書いた経験からすでにご存知かもしれません。 GET: ドキュメントを取得するブラウザに送信される HTML、画像、JS、CSS などのほとんどは、GET メソッドを通じて要求されます。これはデータを取得するための主な方法です。 たとえば、Nettuts+ から記事を取得する場合、http リクエストの最初の行は通常次のようになります。 HTML が読み込まれると、ブラウザは次のように GET リクエストを送信して画像を取得します。 フォームは GET メソッド経由で送信することもできます。次に例を示します。 このフォームが送信されると、HTTP リクエストは次のようになります。 フォーム入力をクエリ文字列に追加することで、サーバーに送信できます。 POST: サーバーにデータを送信するGET メソッドを使用して URL にデータを添付し、サーバーに送信することもできますが、多くの場合、POST を使用してサーバーにデータを送信する方が適切です。 GET 経由で大量のデータを送信することは現実的ではなく、一定の制限があります。 フォームデータを POST リクエストを使用して送信するのが一般的です。上記の例を POST を使用するように変更してみましょう。 このフォームを送信すると、次のような HTTP リクエストが作成されます。 ここで注意すべき点が 3 つあります。
POST リクエストは、AJAX、アプリケーション、cURL などでも使用できます。また、すべてのファイルアップロードフォームでは POST メソッドを使用する必要があります。 HEAD: ヘッダー情報を受信するHEAD は GET と非常によく似ていますが、HEAD は HTTP 応答のコンテンツ部分を受け入れないという点が異なります。 HEAD リクエストを送信すると、ドキュメント自体ではなく、HTTP ヘッダーのみに関心があることを意味します。 この方法により、ブラウザはページが変更されたかどうかを判断し、キャッシュを制御できます。要求された文書が存在するかどうかを判断することもできます。 たとえば、Web サイトに多数のリンクがある場合は、各リンクに HEAD リクエストを送信するだけで、壊れたリンクがあるかどうかを判断できます。これは、GET を使用するよりもはるかに高速です。 http レスポンス構造ブラウザが HTTP リクエストを送信すると、サーバーは HTTP レスポンスでそのリクエストに応答します。内容を気にしない場合は、リクエストは次のようになります。 最初の貴重な情報はプロトコルです。現在、サーバーは HTTP/1.x または HTTP/1.1 を使用します。 次に、ステータスを示す短いメッセージが表示されます。コード 200 は、リクエストが正常に送信され、サーバーがヘッダー情報の後に要求したドキュメントを返すことを意味します。 私たちは皆、「404」ページを見たことがあります。サーバーに存在しないパスを要求すると、サーバーは 200 ではなく 404 で応答します。 応答コンテンツの残りの部分は、HTTP リクエストと同様です。これらは、サーバー ソフトウェア、ページ/ファイルが変更されたとき、MIME タイプなどに関するものです。 繰り返しますが、これらのヘッダーはオプションです。 HTTP ステータス コード
200 成功 (OK) 前述のように、200 はリクエストが成功したことを示すために使用されます。 206 部分的なコンテンツ アプリケーションが特定の範囲内のファイルのみを要求する場合は、206 が返されます。 これは通常、ダウンロードの管理、ダウンロードの再開、またはファイルのチャンクでのダウンロードに使用されます。 404 見つかりません わかりやすい 401 権限がありません パスワードで保護されたページはこのステータスを返します。正しいパスワードを入力しないと、ブラウザに次のメッセージが表示されます。 これはパスワードで保護されたページであり、パスワードを要求するポップアップ ボックスは次のようになることに注意してください。 403 禁止 ページにアクセスする権限がない場合は、403 ステータスが返されます。これは通常、インデックス ページがないフォルダーを開こうとしたときに発生します。サーバー設定でディレクトリの内容の表示が許可されていない場合は、403 エラーが表示されます。 他の方法でも権限制限が送信されます。たとえば、IP アドレスでブロックできますが、これには htaccess の支援が必要です。 302 (または 307) は一時的に移動され、301 は永久的に移動されました これら 2 つの状態は、ブラウザがリダイレクトされるときに表示されます。たとえば、bit.ly のような URL 短縮サービスを使用するとします。これは、リンクをクリックした人が誰であるかを知る方法でもあります。 302 と 301 はブラウザにとっては非常に似ていますが、検索エンジンのクローラーにとってはいくつかの違いがあります。たとえば、Web サイトがメンテナンス中の場合は、302 を使用してクライアント ブラウザーを別のアドレスにリダイレクトします。検索エンジンのクローラーは、将来的にページを再インデックスするようになります。しかし、301 リダイレクトを使用する場合、ウェブサイトが新しいアドレスに恒久的に移動されたことを検索エンジンのクローラーに伝えることになります。 500 内部サーバーエラー このコードは通常、ページ スクリプトがクラッシュしたときに表示されます。ほとんどの CGI スクリプトは、PHP のようにブラウザにエラー メッセージを出力しません。致命的なエラーが発生した場合は、ステータス コード 500 が送信されます。この時点で、トラブルシューティングを行うには、サーバーのエラー ログを確認する必要があります。 完全なリスト HTTP ステータス コードの詳細な説明については、こちらをご覧ください。または、こちら (http://tools.jb51.net/table/http_status_code) で確認することもできます。 HTTP ヘッダー内の HTTP リクエストここで、HTTP ヘッダー内の一般的な HTTP リクエスト情報を見てみましょう。 これらのヘッダーはすべて、PHP の $_SERVER 配列にあります。 getallheaders()関数を使用して、すべてのヘッダー情報を一度に取得することもできます。 ホストHTTP リクエストは特定の IP アドレスに送信されますが、ほとんどのサーバーは同じ IP アドレスで複数の Web サイトをホストする機能を備えているため、サーバーはブラウザーが要求しているドメイン名を認識する必要があります。 これは、ドメインとサブドメインを含む単なる基本ホスト名です。 PHP では、$_SERVER['HTTP_HOST'] または $_SERVER['SERVER_NAME'] を介してこれを表示できます。 ユーザーエージェント
このヘッダーには次の情報を含めることができます。
これは、一部の Web サイトが訪問者に関する情報を収集するために使用する一般的な方法です。たとえば、訪問者がモバイル フォンからサイトにアクセスしているかどうかを判断し、低解像度でも適切に動作するモバイル サイトに誘導するかどうかを決定できます。 PHPでは、$_SERVER['HTTP_USER_AGENT']を通じてUser-Agentを取得できます。 受け入れ言語
この情報は、ユーザーのデフォルトの言語設定を示すことができます。ウェブサイトに異なる言語バージョンがある場合、この情報を使用してユーザーのブラウザをリダイレクトできます。 カンマで区切ることで複数の言語を運ぶことができます。最初の言語は優先言語となり、他の言語にはユーザーの言語の好みを示す「q」値(0〜1)が付けられます。 PHPでは、$_SERVER["HTTP_ACCEPT_LANGUAGE"]を使用してこの情報を取得します。 受け入れエンコード
最近のブラウザのほとんどは gzip 圧縮をサポートしており、この情報をサーバーに報告します。このとき、サーバーは圧縮された HTML をブラウザに送信します。これにより、ファイル サイズが約 80% 削減され、ダウンロード時間と帯域幅が節約されます。 PHPでは、$_SERVER["HTTP_ACCEPT_ENCODING"]を使用してこの情報を取得できます。 ob_gzhandler()メソッドが呼び出されると値が自動的に検出されるため、手動で確認する必要はありません。 変更後ページがすでにブラウザにキャッシュされている場合、次回そのページにアクセスしたときにブラウザはドキュメントが変更されたかどうかを検出し、次のようなヘッダーを送信します。 この時点以降に変更されていない場合、サーバーは「304 Not Modified」を返し、コンテンツを返しません。ブラウザはキャッシュからコンテンツを自動的に読み取ります PHP では、$_SERVER['HTTP_IF_MODIFIED_SINCE'] を使用してこれを検出できます。 また、キャッシュされた情報が正しいかどうかを判断するために使用される Etag と呼ばれる HTTP ヘッダーもあります。これについては後で説明します。 クッキー名前が示すように、ブラウザに保存されている Cookie 情報をサーバーに送信します。 セミコロンで区切られた名前と値のペアのセットです。クッキーにはセッション ID も含まれる場合があります。 PHP では、個々の Cookie に $_COOKIE 配列からアクセスできます。 $_SESSION 配列を直接使用してセッション変数を取得できます。セッション ID が必要な場合は、Cookie の代わりに session_id() 関数を使用できます。 リファラー名前が示すように、ヘッダーには参照 URL 情報が含まれます。 たとえば、Nettuts+ のホームページにアクセスしてリンクをクリックすると、次のヘッダーがブラウザに送信されます。 PHPでは、この値は$_SERVER['HTTP_REFERER']を通じて取得できます。 「referrer」という単語が「referer」と誤って綴られていることにお気づきかもしれません。残念ながら、公式の HTTP 仕様ではそのように記述され、そのままになってしまいました。 承認ページで認証が必要な場合、ブラウザにログイン ウィンドウが表示されます。正しいアカウントを入力すると、ブラウザは HTTP リクエストを送信しますが、今回は次のようなヘッダーが含まれます。 ヘッダーに含まれる情報は base64 でエンコードされています。たとえば、base64_decode('bXl1c2VyOm15cGFzcw==') は 'myuser:mypass' に変換されます。 PHPでは、この値は$_SERVER['PHP_AUTH_USER']と$_SERVER['PHP_AUTH_PW']を使用して取得できます。 詳細については、WWW 認証セクションで説明します。 HTTP ヘッダー内の HTTP レスポンスここで、HTTP ヘッダー内の一般的な HTTP 応答情報について理解しましょう。 PHP では、 header()を通じてヘッダー応答情報を設定できます。 PHP は、コンテンツの読み込み、Cookie の設定など、いくつかの必要なヘッダー情報を自動的に送信しました。送信されたヘッダー情報と送信されるヘッダー情報は、 headers_list()関数を通じて確認できます。 headers_sent()関数を使用して、ヘッダーが送信されたかどうかを確認することもできます。 キャッシュ制御w3.org では、これを次のように定義しています。「Cache-Control 汎用ヘッダー フィールドは、要求/応答チェーンに沿ったすべてのキャッシュ メカニズムが従わなければならないディレクティブを指定するために使用されます。」 「キャッシュ メカニズム」には、ISP が使用する可能性のあるゲートウェイとプロキシの情報が含まれます。 例えば: 「public」は、応答を誰でもキャッシュできることを意味し、「max-age」はキャッシュが有効な秒数を示します。ウェブサイトのキャッシュを許可すると、ダウンロード時間と帯域幅が大幅に削減され、ブラウザの読み込み速度も向上します。 「no-cache」ディレクティブを設定してキャッシュを無効にすることもできます。 詳細についてはw3.org を参照してください。 コンテンツタイプこのヘッダーには、ドキュメントの「MIME タイプ」が含まれます。ブラウザはこのパラメータに基づいてドキュメントを解析する方法を決定します。たとえば、HTML ページ (または HTML 出力の PHP ページ) は次のような結果を返します。 「text」はドキュメントタイプ、「html」はドキュメントのサブタイプです。 このヘッダーには、文字セットなどの詳細情報も含まれます。 画像の場合、応答は次のようになります。 ブラウザは、MIME タイプを使用して、ドキュメントを開くために外部プログラムを使用するか、独自の拡張機能を使用するかを決定できます。次の例では、Adobe Reader を呼び出します。 直接ロードする場合、Apache は通常、ドキュメントの MIME タイプを自動的に判別し、適切な情報をヘッダーに追加します。また、ほとんどのブラウザにはある程度のフォールト トレランス機能があります。ヘッダーがこの情報を提供しない、または誤って提供する場合、ブラウザは自動的に MIME タイプを検出します。 一般的な MIME タイプのリストは、こちらでご覧いただけます。 PHP では、finfo_file()を使用してファイルの ime タイプを検出できます。 コンテンツ配置このヘッダーは、応答の内容を解析するのではなく、ファイルのダウンロード ウィンドウを開くようにブラウザに指示します。例えば: ブラウザに次のようなダイアログ ボックスが表示されます。 適切な Content-Type ヘッダーも送信されることに注意してください。 コンテンツの長さコンテンツがブラウザに送信されるときに、サーバーはこのヘッダーを使用して、送信されるファイルのサイズ (バイト) をブラウザに通知できます。 この情報はファイルのダウンロードに非常に役立ちます。このようにしてブラウザはダウンロードの進行状況を認識します。 たとえば、ここではダウンロード速度が遅い場合をシミュレートするダミー スクリプトを作成しました。 結果は次のようになります。 ここで、Content-Length ヘッダーをコメント アウトします。 結果は次のようになります: ブラウザではダウンロードした量のみが表示されますが、合計でダウンロードする必要がある量は表示されません。また、進行状況バーにも進行状況が表示されません。 エタグこれはキャッシュ目的で生成される別のヘッダーです。次のようになります: サーバーは、送信された各ファイルとともにこの情報をブラウザに応答する場合があります。この値には、ドキュメントの最終更新日、ファイル サイズ、またはファイル チェックサムが含まれます。ブラウザは受信したドキュメントとともにそれをキャッシュします。次回ブラウザが同じファイルを要求すると、次の HTTP 要求が送信されます。 要求されたドキュメントの Etag 値が一致する場合、サーバーは 2oo ではなく 304 ステータス コードを送信します。そして、コンテンツは返されません。ブラウザはキャッシュからファイルを読み込みます。 最終更新日名前が示すように、このヘッダーはドキュメントの最終変更時刻を GMT 形式で示します。 別のキャッシュ メカニズムを提供します。ブラウザは次のようなリクエストを送信する場合があります。 これについては、If-Modified-Since セクションですでに説明しました。 位置このヘッダーはリダイレクトに使用されます。応答コードが 301 または 302 の場合、サーバーはこのヘッダーを送信する必要があります。たとえば、http://www.nettuts.com にアクセスすると、ブラウザは次の応答を受け取ります。 PHP では、次のように訪問者をリダイレクトできます。 デフォルトでは、302 ステータス コードが送信されます。301 を送信する場合は、次のように記述します。 Cookie の設定ウェブサイトが閲覧履歴の Cookie を設定または更新する必要がある場合、次のようなヘッダーが使用されます。 各 Cookie は個別のヘッダーとして送信されます。 js 経由で Cookie を設定しても、HTTP ヘッダーには反映されないことに注意してください。 PHP では、 setcookie()関数を使用して Cookie を設定することができ、PHP は適切な HTTP ヘッダーを送信します。 次のヘッダーが送信されます。 有効期限が指定されていない場合、ブラウザを閉じると Cookie は削除されます。 WWW認証ウェブサイトはユーザーを認証するためにこのヘッダーを HTTP 経由で送信する場合があります。ブラウザはヘッダーでこの応答を確認するとポップアップを開きます。 次のようになります: PHP マニュアルの章に、PHP でこれを行う方法を示す簡単なコードがあります。 コンテンツエンコーディングこのヘッダーは通常、返されるコンテンツが圧縮されている場合に設定されます。 PHP では、 ob_gzhandler()関数を呼び出すと、このヘッダーが自動的に設定されます。 元の URL: http://css9.net/all-about-http-headers/ |
<<: テーブルを Excel にエクスポートする純粋な JS メソッド
この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...
要点CSS resize プロパティを使用すると、要素のサイズ変更可能性を制御できます。サイズ変更を...
1 はじめにRedis 、 ANSI C言語で開発されたKey-Valueベースの高性能NoSQLデ...
MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...
docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...
目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...
最近、WeChatはAppleによってダークモードの開発を強制されました。ますます多くのウェブサイト...
目次ERR 1067による殺人事件2番目の問題の原因はsql_modeです3. sql_modeを設...
序文最近、友人がSQLを書くときにnull値を判定する方法が間違っていて、プログラム内のデータにエラ...
1 公式ウェブサイトから MySQL 5.6 バージョンの圧縮パッケージmysql-5.6.36-w...
TeamCenter12はアカウントのパスワードを入力し、ログインをクリックすると、404または50...
1行のコマンド docker run -d \ -v /share:/home/vsftpd \ -...
大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...
序文最近、いくつかのフロントエンド プロジェクトに取り組んでおり、ページにいくつかのテーブルを表示す...
自己学習型ゲーム開発の道において、最も充実した瞬間は、自分でミニゲームを作り、友達と共有して試しにプ...