web-dev-qa-db-ja.com

「HTTPはステートレスプロトコル」と言われるのはなぜですか?

HTTPにはHTTP Cookieがあります。 Cookieを使用すると、サーバーはユーザーの状態、接続数、最後の接続などを追跡できます。

HTTPには、同じTCP接続から複数の要求を送信できる永続的な接続(キープアライブ)があります。

153
Jose Nobile

同じHTTP接続を介して複数の要求を送信できますが、サーバーは同じソケットを介して到着することに特別な意味を付加しません。それは単にパフォーマンスの問題であり、それ以外の場合は各リクエストの接続の再確立に費やされる時間/帯域幅を最小限に抑えることを目的としています。

HTTPに関する限り、それらはすべて別個の要求であり、要求を満たすために十分な情報を独自に含める必要があります。それが「無国籍」の本質です。サーバーが知っている共有情報(ほとんどの場合、Cookie内のセッションID)がない限り、リクエストは相互に関連付けられません。

111
cHao

From Wikipedia

HTTPはステートレスプロトコルです。ステートレスプロトコルでは、サーバーが複数の要求の間、各ユーザーに関する情報やステータスを保持する必要はありません。

ただし、一部のWebアプリケーションでは、ユーザーのWebページのコンテンツをカスタマイズするためにWebサーバーが必要な場合など、ページごとのユーザーの進捗状況を追跡する必要があります。これらの場合の解決策は次のとおりです。

  • hTTP Cookieの使用。
  • サーバー側セッション、
  • 隠し変数(現在のページにフォームが含まれる場合)、および
  • URIエンコードされたパラメーターを使用したURL書き換え(例:/index.php?session_id=some_unique_session_code)。

プロトコルをステートレスにするのは、サーバーが複数の要求にわたって状態を追跡する必要がない必要がないことです。これにより、クライアントとサーバー間の契約が簡素化され、多くの場合(たとえば、CDNを介して静的データを提供する)、転送する必要があるデータの量が最小限に抑えられます。サーバーがクライアントの訪問状態を維持するためにrequiredであった場合、リクエストの発行と応答の構造はより複雑になります。そのままで、モデルのシンプルさは最大の特徴の1つです。

93
dimo414

ステートレスプロトコルでは、サーバーが複数の要求の間セッション情報または各通信パートナーに関するステータスを保持する必要がないためです。

HTTPはステートレスプロトコルです。つまり、トランザクションが終了すると、ブラウザーとサーバー間の接続が失われます。

19
Rahul Tripathi

HTTPはコネクションレスであり、これはHTTPがステートレスプロトコルであることの直接的な結果です。サーバーとクライアントは、現在の要求の間のみ互いに​​認識します。その後、二人はお互いを忘れます。このプロトコルの性質により、クライアントもブラウザも、Webページ全体の異なるリクエスト間で情報を保持できません。

3
user3496740

HTTPは、各リクエストが独立して実行されるため、ステートレスプロトコルとして呼び出されます。これは、トランザクションがブラウザーとサーバー間の接続を終了すると、また失われました。

プロトコルをステートレスにするのは、元の設計ではHTTPが比較的単純なファイル転送プロトコルであるということです。

  1. uRLで指定されたファイルを要求する、
  2. 応答してファイルを取得し、
  3. 切断します。

同じクライアントからであっても、1つの接続と別の接続との間に維持される関係はありませんでした。これにより、クライアントとサーバー間の契約が簡素化され、多くの場合、転送する必要があるデータの量が最小限に抑えられます。

3
Mobeen Sarwar

プロトコルHTTPがState full protocolとして指定されている場合、ブラウザーウィンドウは単一の接続を使用して、Webアプリケーションに与えられる複数の要求に対してWebサーバーと通信します。クライアントの接続の大部分がアイドル状態であっても、Webサーバーの最大接続に到達する状況が生じる可能性があります。

3

The HTTP request/response cycle

従来のデスクトッププログラミングとは著しく異なるWeb開発の重要な側面は、HTTPが本質的にstateless有線プロトコル。

  • Webサーバーがクライアントブラウザーに応答を送信するとすぐに、以前の対話に関するすべてが忘れられます。
  • これは、ユーザーがアプリケーションのメインウィンドウをシャットダウンするまで、実行可能ファイルの状態が最も頻繁にアクティブでキックされる従来のデスクトップアプリケーションの場合には確かに当てはまりません。
  • この点を考えると、Web開発者として、サイトに現在ログオンしているユーザーに関する情報(ショッピングカート内のアイテム、クレジットカード番号、自宅の住所など)を「記憶」するための特定の措置を講じるのはあなた次第です。
  • (Out of the box)ASP.NETは、セッション変数、Cookie、アプリケーションキャッシュ、ASP.NETプロファイル管理APIなどの手法を使用して、状態を処理するさまざまな方法を提供します。
0
Tahir77667

HTTPはステートレスです。 TCPはステートフルです。いわゆる「HTTP接続」はなく、「HTTP要求」と「HTTP応答」のみがあります。別の「HTTPリクエスト」を行うためにメンテナンスする必要はありません。 「キープアライブ」の接続ヘッダーは、常にTCP接続を切断して再確立するのではなく、TCPが後続のHTTP要求および応答によって再利用されることを意味します。

0
Xing