TCP プロトコルはトランスポート層に相当し、HTTP プロトコルはアプリケーション層に相当しますが、本質的には両者は比較できません。 Http プロトコルは TCP プロトコルに基づいており、ブラウザはサーバーから Web ページ データを取得する必要がある場合、Http リクエストを発行します。
Http は、TCP 経由でサーバーへの接続チャネルを確立します。このリクエストに必要なデータが完了すると、Http はすぐに TCP 接続を切断します。プロセスはとても短いです。したがって、HTTP 接続は短い接続であり、ステートレス接続です。いわゆるステートレスとは、ブラウザがサーバーへのリクエストを開始するたびに、接続を経由せず、毎回新しい接続を確立することを意味します。接続の場合、サーバー プロセスは接続を維持し、何らかの情報ステータスをメモリに記憶できます。各リクエストが終了すると接続が閉じられ、関連するコンテンツが解放されるため、状態は記憶されず、ステートレス接続になります。
推奨コース: PHP チュートリアル 。
HTML ページは時間が経つにつれて複雑になり、多くの画像が埋め込まれている場合がありますが、このとき画像にアクセスするたびに TCP 接続を確立するのは非効率です。そこで、効率が悪いという問題を解決するためにキープアライブが提案されました。 HTTP/1.1 以降、接続機能を維持するためにキープアライブがデフォルトで有効になっています。簡単に言えば、Web ページを開いたときに、クライアントとサーバー間の HTTP データの送信に使用される TCP 接続は閉じられません。クライアント このサーバー上の Web ページに再度アクセスすると、この確立された接続を引き続き使用します。キープアライブでは接続が永続的に維持されるわけではありません。保持期間があり、別のサーバー ソフトウェア (Apache など) で設定できます。
ここでは一定期間TCPコネクションを維持しますが、この時間は限られており、その時点ではまだクローズされるため、各コネクションが完了するたびにクローズするものともみなします。その後、セッション、Cookie、およびその他の関連テクノロジーを通じて、一部のユーザーのステータスを維持することもできます。ただし、依然として毎回 1 つの接続が使用され、ステートレス接続のままです。
かつて、私には混乱を許容できない概念がありました。 Http がステートレスな短い接続であるのに対し、TCP はステートフルな長い接続であるのはそのためですか? HTTP は TCP に基づいているのではありませんか? なぜ依然として短い接続が可能でしょうか?
Http は各リクエストが完了した後に TCP 接続を閉じるため、接続が短いことがわかりました。ソケット プログラミングを通じて TCP プロトコルを直接使用する場合、コード領域を通じて接続のオープンとクローズのタイミングを制御できるため、コードを通じて接続を閉じない限り、接続はクライアントのプロセス内にあり、サーバーは常に存在し、関連するステータス データは常に保存されます。
HTTP はアプリケーション層に属するオブジェクト指向プロトコルであり、そのシンプルかつ高速な方式のため、分散型ハイパーメディア情報システムに適しています。これは 1990 年に提案され、数年間の使用と開発を経て継続的に改善および拡張されてきました。現在、WWW では HTTP/1.0 の 6 番目のバージョンが使用されており、HTTP/1.1 の標準化作業が進行中であり、HTTP-NG (Next Generation of HTTP) 提案も提出されています。
HTTP プロトコルの主な機能は次のように要約できます:
1. クライアント/サーバー モードをサポートします。
2. シンプルかつ高速: クライアントがサーバーにサービスを要求するときは、要求メソッドとパスを送信するだけで済みます。一般的に使用されるリクエスト メソッドは、GET、HEAD、および POST です。各メソッドは、クライアントとサーバー間の異なるタイプの接続を指定します。 HTTP プロトコルは単純であるため、HTTP サーバーのプログラム サイズは小さく、通信速度は非常に高速です。
3. 柔軟性: HTTP では、あらゆる種類のデータ オブジェクトの送信が可能です。転送されるタイプは Content-Type によってマークされます。
4. 接続なし: 接続なしの意味は、各接続が 1 つのリクエストのみを処理するように制限することです。サーバーはクライアントの要求を処理し、クライアントの応答を受信した後、接続を切断します。この方法により、送信時間が節約されます。
5. ステートレス: HTTP プロトコルはステートレス プロトコルです。ステートレスとは、プロトコルにトランザクション処理のためのメモリ機能がないことを意味します。ステータスがないということは、後続の処理で以前の情報が必要な場合にその情報を再送信する必要があることを意味し、その結果、接続ごとに転送されるデータ量が増加する可能性があります。一方、事前の情報が必要ない場合、サーバーはより速く応答します。
以上がhttpプロトコルとtcpプロトコルの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。