検索
ホームページ運用・保守Linuxの運用と保守HTTP プロトコルの概要と深い理解

HTTP プロトコルの概要と深い理解

Aug 23, 2017 pm 03:56 PM
http応用要約する

実際の作業シナリオで遭遇した http プロトコルに関連するいくつかの内容についての私の理解を要約します。

HTTP プロトコルの概要と深い理解

リクエストとレスポンス

リクエストの形式

例: GET /api/index.json HTTP/1.1

例: Accept: */* ; User -Agent: Mozilla/4.0;……

[] 例: id=1×tamp=xxxxxx

応答形式

: HTTP/1.1 200 OK

例: Content-Type: application/json;......

[] 例: { "id":1,"username": "testuser"}

ステータスコード

httpステータスコードは60近くありますが、ここでは主に、日常的に多かれ少なかれ遭遇するであろう、異常な状況下で生成されるいくつかの一般的なステータスコードを記録します。アプリケーションの問題を理解し、特定するのに役立ちます。

206 - ブレークポイントのダウンロード中に使用されます。クライアントはコンテンツの一部を要求し、サーバーはコンテンツのこの部分を正常に返しました。このステータスは現時点で使用されます。

301 - 永久ジャンプ。元のアドレスは存在せず、URL は別のアドレスを指します。これは主に検索エンジンに関連しており、クローラーの検索動作に影響します。

302 - 一時的なジャンプ。サーバーは新しい URL をクライアントに返し、クライアントは引き続きこの URL にアクセスしてコンテンツを取得できます。

304 - リソースは変更されていません。クライアントはローカルにキャッシュされたコンテンツを使用できます。これは静的コンテンツ アクセスでは一般的です。

413 - リクエスト エンティティが大きすぎます。よくある状況は、大きなファイルをアップロードするが、サーバー (nginx など) の制限を超えることです。または、リクエスト ヘッダーまたはリクエスト本文がバックエンド サーバー (Tomcat など) の設定を超えています (たとえば、現在のドメイン名の下に Cookie が多すぎて、リクエスト ヘッダーの制限を超えています)

416 - ブレークポイントの再開に関連、クライアントリクエストのスコープがサーバー上のファイルサイズを超えています。

500 - サーバー内部エラー。通常の結果を返すことができません。たとえば、最も一般的なアプリケーションは、処理されない null ポインタ例外をスローします。

502 - ゲートウェイ エラー。一般的な状況は、リバース プロキシ バックエンド サーバー (樹脂や Tomcat など) が起動されていないことです。

503 - サービスが利用できません。たとえば、サーバーの負荷が高すぎるか、サーバーがサービスを停止しました。

504 - ゲートウェイのタイムアウト。たとえば、リクエスト期間がサーバーの応答時間制限を超えています。

ヘッダー

httpヘッダーは、リクエストヘッダーとレスポンスヘッダーの2つのカテゴリに分類されます。以下は私たちがよく使うヘッダーです

1. キャッシュ制御

インターネット Web サイト アプリケーションでは、ほとんどどこでもキャッシュが使用されます。HTTP ベースのサービスでは、クライアントのキャッシュで頻繁に変更されない一部のコンテンツも制御できます。これにより、キャッシュされたコンテンツを複数回の訪問で再利用できるようになり、アクセスが高速化され、ユーザー エクスペリエンスが向上します。 http プロトコルは、キャッシュ制御用の http ヘッダーをいくつか規定しています。

Cache-Control (HTTP/1.1)/Pragma (HTTP/1.0): クライアントがキャッシュするかどうか、およびキャッシュが持続する期間を示します。デフォルト値はプライベートです。これは、コンテンツがユーザーのプライベートスペースにキャッシュされることを意味します。例: Cache-Control: max-age=86400、must-revalidate、これは、要求されたリソースが 1 日キャッシュされ (max-age の単位は秒、相対時間)、有効期限が切れた後に再チェックする必要があることをクライアントに伝えます。 。

Expires: クライアント (強制更新が必要ない場合) がサーバーにリクエストを送信せずにローカル キャッシュを直接読み取ることができる期間を指定します。

注:

優先度: キャッシュ制御 > 有効期限

パラメータの詳細な説明: http://condor.depaul.edu/dmumaugh/readings/handouts/SE435/HTTP/node24.html

異なるブラウザー異なる動作(更新、戻る、アドレス バーへの入力など) は実装に違いがある可能性があります。

Last-Modified/If-Modified-Since: Last-Modified は、サーバーからクライアントに返されたリソースの最後に変更されたタイムスタンプです。そのため、クライアントは次のリクエスト (強制更新など) を行うときに If-Modified-Since パラメータを持ち込んで、リソースが更新されたかどうかを確認します。更新がない場合、サーバーは 304 ステータス コードを返します。クライアントはローカルにキャッシュされたリソースを直接取得します。現時点では、要求のオーバーヘッドのみが発生し、ネットワーク送信のオーバーヘッドは発生しません。注: タイムスタンプはグリニッジ標準時 (GMT) である必要があります。例: Last-Modified:Sat, 19 Oct 2013 09:20:15 GMT

ETag/If-None-Match: ETag は、以下に基づいて特定のアルゴリズムを通じて生成されます。ファイル属性 リソース識別子は、クライアントによって要求されたリソースが更新されたかどうかを判断するためにも使用されます。サーバーが ETag 値をクライアントに返すと、次回クライアントが ETag 値を要求したときに、リソースが更新されているかどうかを確認するために If-None-Match パラメーターが提供されます。更新されていない場合は、304 ステータス コードが返されます。 。 (効果は基本的に Last-Modified と同じです)

注:

ETag を計算する必要がありますが、これはコンピューティング リソースが限られているサーバーの消費となるため、一部の Web サイトでは ETag を直接使用しません。

サーバーがロード バランサーの背後にある場合、同じリソースへのリクエストが異なるバックエンド マシンに分散される可能性があります。ETag の計算はファイル属性に依存するため、異なるマシン上の同じコンテンツを持つファイルは異なる ETag を生成する可能性があります。コンテンツが変更されていないオリジナル ファイルは ETag 検証に合格しませんでした。ここには 2 つの解決策があります。1 つは、ファイル コンテンツの md5 値を直接計算するなど、etag の計算がローカル マシンに依存しないことです。もう 1 つは、負荷時に同じ URL リクエストを同じバックエンド マシンに分散することです。バランサー。

実際のビジネス シナリオでは、http キャッシュは非常に優れた用途をいくつか示します:

ロゴ、広告画像など、クライアントが頻繁にアクセスする必要がある静的ファイルなど、クライアントのリソースを最大限に活用します。 .、完全にクライアント上でローカルにキャッシュできます。これにより、ネットワーク リクエストが減少し、クライアントの表示が高速化され、サーバー リクエストの負荷が軽減されます。

ニュースやブログなどの静的コンテンツの一部が検索エンジン クローラーによってクロールされる場合、キャッシュ パラメーターを制御することで、クローラーのクロール頻度を減らし、リソースの不必要な浪費を減らすことができます。

静的リソースが CDN を使用している場合、http キャッシュを設定すると CDN ノードにファイルが保存され、オリジンに戻る CDN の数が減り、ネットワークの遅延とオリジン サーバーの負荷が軽減されます。

2. ブレークポイントリクエスト

Accept-Ranges: サーバーがブレークポイントのダウンロードをサポートしている場合、クライアントはこの応答ヘッダーをクライアントに返します。これを認識すると、ブレークポイントリクエストを送信できます。

Content-Length: 現在のリクエストによって返されるデータ量をクライアントに伝える応答情報の長さ。ここで、head メソッドを使用してリクエストを送信すると、特定のデータは返されませんが、Content-Length は完全なデータのサイズを返すことに注意してください。

Range/Content-Range: クライアントはリクエストを行うときに Range という名前のヘッダーを送信し、データのどの部分をリクエストしたいかをサーバーに伝えます。例: Range: bytes=0-1023 は、バイト 0 ~ 1023 を要求することを意味します。その後、サーバーはこれらの 1024 バイトのコンテンツをクライアントに返し、Content-Range が応答ヘッダーに含まれます。つまり、Content-Range: バイト 0 ~ 1023/4096、この 4096 が合計ファイル サイズです。クライアントの次のリクエストは 1024 番目のバイトから開始できます、範囲: bytes=1024-xxxx

3. Encoding

Accept-Encoding/Content-Encoding: 前者はクライアントがサポートするメッセージ エンコーディング タイプです。デフォルトはidentityで、オプションの値にはgzip、compressなどが含まれます。後者はサーバー側応答情報の内容エンコーディングタイプであり、圧縮が一般的に使用されます。圧縮の利点は明らかであり、サーバー側の圧縮による CPU 消費量と比較して、ネットワーク送信のコストを大幅に削減できます。一般的な形式: Content-Encoding: gzip、deflate、compress。通常、html、js、css、xml、json などの応答結果を圧縮して送信できます。

Transfer-Encoding: 応答ヘッダー。応答メッセージの転送エンコーディング タイプは、ネットワーク送信の形式を指定します。一般に、これは次の形式になります: Transfer-Encoding: chunked。サーバーが動的コンテンツを生成し、応答情報の具体的な長さがわからない場合、この指定されたブロックを通じてそれを送信し、処理した量のデータを返すことができるため、データの準備ができるまで待って返す必要はありません。一斉に。上記のgzipなどのコンテンツエンコードと組み合わせることで、ブロック単位で圧縮して送信することができます。さらに、このエンコーディングを使用して送信する場合、コンテンツが完全に生成されていないため、Content-Length を確認できないことに注意してください。

4. その他

X-Forward-For: リクエストヘッダー。特にプロキシ (フォワードまたはリバース) 経由でサーバーにアクセスする場合、またはサーバーが負荷分散デバイスの背後にある場合に、ユーザーの実際の IP を識別するために使用されます。形式: X-forward-For: client、proxy1、proxy2、... 一番左の IP はクライアントに最も近い IP です。

User-Agent: リクエスト ヘッダー。クライアントの基本情報を識別するためにサーバーによって使用されるリクエスト ヘッダー。一般に、これは検索クローラーを識別するときに役立ちます。また、一部のシナリオでは、これを使用してクライアント統計を実行することもできます。

Referer: リクエストヘッダー。クライアントがサーバーにアクセスするとき、このリファラーはリクエストのソース (リンク元の Web サイトなど) を指定します。これは一部の統計でよく使用されます。さらに、もう 1 つの重要な用途は、リソースのホットリンク対策が必要なシナリオで不正なリクエスト ソースをフィルタリングすることです (ただし、このリファラーはクライアントによって偽造される可能性があります)。

Location: 応答ヘッダー。この Location ヘッダーは 301/302 ステータス コードの応答ヘッダーに含まれ、必要なリソースにアクセスするために新しいアドレスを使用するようにクライアントに指示します。

Connection: request/response ヘッダー。http/1.1 では、クライアントとサーバーはデフォルトで接続を維持します。つまり、どちらかの当事者が接続を維持したくない場合は、この値を次のように設定できます。デフォルトでは、クライアントとサーバーは長時間の接続を維持するため、クライアントはこの接続を使用して複数の http リクエストを送信でき、頻繁な接続作成による消費を削減できます。このパラメータの場合、接続キープアライブ時間やサーバ カーネルの一部のネットワーク パラメータ設定(tcp 用)など、サーバ側でさらに多くの設定が必要になる場合があります。

セッションとクッキー

http リクエストはステートレスなリクエストですが、インターネット アプリケーションでは、対話型操作を完了するためにユーザー ステータス情報を識別する必要があることがよくあります。たとえば、ユーザー認証ではユーザーのログイン ステータスを記録する必要があり、ショッピング カート アプリケーションでは商品を記憶する必要があります。広告配信アプリケーションはユーザーの履歴閲覧行動などを記録する必要があります。ここではセッションとCookieが使用されます。

セッション: http リクエストとレスポンスのプロセス中のクライアントとサーバー間の対話状態を指します。この情報は、メモリ、データベースなどのサーバー側に保存されます。各セッションにはサーバーによって生成される一意の識別子があり、クライアントが次のリクエストでこの識別子を使用して、サーバーがクライアントのステータスを判断しやすくできるように、この識別子もクライアントに保存する必要があります。

セッションのクライアントサポート:

Cookieを介してセッションIDを保存し、リクエスト時にサーバーに送信します。

URL パラメーターにセッション ID を含めてサーバーと通信します。

フォームの非表示フィールドにセッションIDを入れてサーバーと通信します。

セッション共有の問題:

分散アプリケーションでは、通常、http サーバーがリバース プロキシまたは負荷分散デバイスの背後にインストールされるため、セッション共有の問題が発生します。つまり、同じユーザーからの複数のリクエストが複数の異なるマシンに分散される可能性があります。セッションをマシンのローカル メモリに保存すると、ユーザーのセッションを複数のマシン間で共有できなくなります。一般に、この問題は 2 つの方法で解決できます:

セッションを分散メモリ (例: memcached) または集中ストレージ (例: データベース) に保存します。

同じユーザーのリクエストをリバース プロキシまたは負荷分散デバイス上の同じマシンに分散します (ここでは、マシンがダウンした後のリクエストの再分散の問題に対処する必要があります)。

Cookie: クライアント上でステートフルな情報を維持します。セキュリティ上の理由から、各 Cookie コンテンツは特定のドメインまたはパスに属します。

セッション Cookie: 有効期限は指定されていません。メモリに保存され、ブラウザを閉じると期限切れになります。

永続 Cookie: 有効期限を指定し、ブラウザーにローカルに保存されます。

詳細については、http://en.wikipedia.org/wiki/HTTP_cookie を参照してください。

Cookie にはセキュリティ上の問題があることに注意してください。

ここでは、私が仕事中に遭遇した http プロトコルに関連するいくつかの内容についての私の理解をまとめました。http プロトコルにはまだ調査する必要があることがたくさんあり、http についての理解を続ける必要があります。プロトコルはアプリケーションの開発に大きな利便性をもたらします。

最後に、2 つの非常に重要な http デバッグ ツールをお勧めします。fiddler (Windows) と charles (Mac) には http プロキシ機能があり、ブラウザベースではない http アプリケーション (モバイル アプリなど) の場合、これら 2 つのツールを使用して、 httpリクエストを監視します。

以上がHTTP プロトコルの概要と深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Linux:リカバリモード(およびメンテナンス)に入る方法Linux:リカバリモード(およびメンテナンス)に入る方法Apr 18, 2025 am 12:05 AM

Linux Recoveryモードを入力する手順は次のとおりです。1。システムを再起動し、特定のキーを押してGrubメニューを入力します。 2。[RecoveryMode)でオプションを選択します。 3. FSCKやrootなどの回復モードメニューで操作を選択します。リカバリモードを使用すると、シングルユーザーモードでシステムを開始し、ファイルシステムのチェックと修理を実行し、構成ファイルを編集し、システムの問題を解決するのに役立ちます。

Linuxの重要なコンポーネント:初心者向けに説明されていますLinuxの重要なコンポーネント:初心者向けに説明されていますApr 17, 2025 am 12:08 AM

Linuxのコアコ​​ンポーネントには、カーネル、ファイルシステム、シェル、および共通ツールが含まれます。 1.カーネルはハードウェアリソースを管理し、基本的なサービスを提供します。 2。ファイルシステムはデータを整理して保存します。 3.シェルは、ユーザーがシステムと対話するインターフェイスです。 4.一般的なツールは、毎日のタスクを完了するのに役立ちます。

Linux:その基本構造を見てくださいLinux:その基本構造を見てくださいApr 16, 2025 am 12:01 AM

Linuxの基本構造には、カーネル、ファイルシステム、およびシェルが含まれます。 1)カーネル管理ハードウェアリソースとUname-Rを使用してバージョンを表示します。 2)ext4ファイルシステムは、大きなファイルとログをサポートし、mkfs.ext4を使用して作成されます。 3)シェルは、BASHなどのコマンドラインインタラクションを提供し、LS-Lを使用してファイルをリストします。

Linux操作:システム管理とメンテナンスLinux操作:システム管理とメンテナンスApr 15, 2025 am 12:10 AM

Linuxシステムの管理とメンテナンスの重要な手順には、次のものがあります。1)ファイルシステム構造やユーザー管理などの基本的な知識をマスターします。 2)システムの監視とリソース管理を実行し、TOP、HTOP、その他のツールを使用します。 3)システムログを使用してトラブルシューティング、JournalCtlおよびその他のツールを使用します。 4)自動化されたスクリプトとタスクのスケジューリングを作成し、Cronツールを使用します。 5)セキュリティ管理と保護を実装し、iPtablesを介してファイアウォールを構成します。 6)パフォーマンスの最適化とベストプラクティスを実行し、カーネルパラメーターを調整し、良い習慣を開発します。

Linuxのメンテナンスモードの理解:必需品Linuxのメンテナンスモードの理解:必需品Apr 14, 2025 am 12:04 AM

Linuxメンテナンスモードは、起動時にinit =/bin/bashまたは単一パラメーターを追加することにより入力されます。 1.メンテナンスモードの入力:GRUBメニューを編集し、起動パラメーターを追加します。 2。ファイルシステムを読み取りおよび書き込みモードに再マウントします:Mount-Oremount、RW/。 3。ファイルシステムの修復:FSCK/dev/sda1などのFSCKコマンドを使用します。 4.データをバックアップし、データの損失を避けるために慎重に動作します。

DebianがHadoopデータ処理速度を改善する方法DebianがHadoopデータ処理速度を改善する方法Apr 13, 2025 am 11:54 AM

この記事では、DebianシステムのHadoopデータ処理効率を改善する方法について説明します。最適化戦略では、ハードウェアのアップグレード、オペレーティングシステムパラメーターの調整、Hadoop構成の変更、および効率的なアルゴリズムとツールの使用をカバーしています。 1.ハードウェアリソースの強化により、すべてのノードが一貫したハードウェア構成、特にCPU、メモリ、ネットワーク機器のパフォーマンスに注意を払うことが保証されます。高性能ハードウェアコンポーネントを選択することは、全体的な処理速度を改善するために不可欠です。 2。オペレーティングシステムチューニングファイル記述子とネットワーク接続:/etc/security/limits.confファイルを変更して、システムによって同時に開くことができるファイル記述子とネットワーク接続の上限を増やします。 JVMパラメーター調整:Hadoop-env.shファイルで調整します

Debian syslogを学ぶ方法Debian syslogを学ぶ方法Apr 13, 2025 am 11:51 AM

このガイドでは、Debian SystemsでSyslogの使用方法を学ぶように導きます。 Syslogは、ロギングシステムとアプリケーションログメッセージのLinuxシステムの重要なサービスです。管理者がシステムアクティビティを監視および分析して、問題を迅速に特定および解決するのに役立ちます。 1. syslogの基本的な知識Syslogのコア関数には以下が含まれます。複数のログ出力形式とターゲットの場所(ファイルやネットワークなど)をサポートします。リアルタイムのログ表示およびフィルタリング機能を提供します。 2。syslog(rsyslogを使用)をインストールして構成するDebianシステムは、デフォルトでrsyslogを使用します。次のコマンドでインストールできます:sudoaptupdatesud

DebianでHadoopバージョンを選択する方法DebianでHadoopバージョンを選択する方法Apr 13, 2025 am 11:48 AM

Debianシステムに適したHadoopバージョンを選択する場合、次の重要な要因を考慮する必要があります。1。安定性と長期的なサポート:安定性とセキュリティを追求するユーザーにとって、Debian11(Bullseye)などのDebianの安定したバージョンを選択することをお勧めします。このバージョンは完全にテストされており、最大5年のサポートサイクルがあり、システムの安定した動作を確保できます。 2。パッケージの更新速度:最新のHadoop機能と機能を使用する必要がある場合は、DebianのUnstableバージョン(SID)を検討できます。ただし、不安定なバージョンには互換性の問題と安定性のリスクがあることに注意する必要があります。 3。コミュニティのサポートとリソース:Debianには、豊富なドキュメントを提供できるコミュニティサポートが大きくなり、

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール