web-dev-qa-db-ja.com

ブラウザーとWebサーバー間の通信はどのように行われますか?

ブラウザーとWebサーバーの間で通信がどのように行われるかを説明できますか?方法を学びたい

  • GET、POST verbs(とりわけ)
  • クッキー
  • セッション
  • クエリ文字列

舞台裏で働きます。

40
Madhan

ハイパーテキスト転送プロトコル(HTTP)は、Webページ(現在読んでいるページなど)の転送に使用されるプロトコルです。プロトコルは、実際の標準的な方法に他なりません。米国の大統領、または国の王に会う場合は、従わなければならない特定の手順があります。ただ歩いて「おいおい」と言うことはできませんでした。歩く方法、話す方法、標準的な挨拶、および会話を終了する標準的な方法があります。 TCP/IPスタック内のプロトコルは同じ目的を果たします。

TCP/IPスタックには、アプリケーション、トランスポート、インターネット、およびネットワークの4つの層があります。各層には、情報の流れを標準化するために使用されるさまざまなプロトコルがあり、それぞれがTCP/IPスタックを下るときに情報をパケットにフォーマットするために使用される(コンピューターで実行される)コンピュータープログラムです。パケットは、アプリケーションレイヤーデータ、トランスポートレイヤーヘッダー(TCPまたはUDP)、およびIPレイヤーヘッダーの組み合わせです(ネットワークレイヤーはパケットを取得してフレームに変換します)。

アプリケーション層

...ネットワークを使用してデータを転送するすべてのアプリケーションで構成されます。 2つのポイント間でデータがどのように取得されるかについては気にせず、ネットワークの状態についてはほとんど知りません。アプリケーションは、TCP/IPスタックの次のレイヤーにデータを渡し、応答が受信されるまで他の機能を実行し続けます。アプリケーション層は、アドレス指定にホスト名(www.dalantech.comなど)を使用します。アプリケーション層プロトコルの例:ハイパーテキスト転送プロトコル(HTTP-ウェブブラウジング)、シンプルメール転送プロトコル(SMTP-電子メール)、ドメインネームサービス(DNS-ホスト名をIPアドレスに解決する)、ほんの数例を挙げます。

アプリケーション層の主な目的は、異なるオペレーティングシステムで実行されているアプリケーション間で共通のコマンド言語と構文を提供することです-インタプリタのようなものです。ネットワークを使用するアプリケーションによって送信されるデータは、いくつかの標準セットのいずれかに準拠するようにフォーマットされています。すべてのネットワークアプリケーションが準拠している標準のため、受信側のコンピューターは、送信側とは異なるオペレーティングシステムを実行している場合でも、送信されているデータを理解できます。

トランスポート層

...ソースおよび宛先ポート番号をアプリケーションに割り当てる責任があります。ポート番号は、トランスポート層によってアドレス指定に使用され、範囲は1〜65,535です。 0〜1023のポート番号は「既知のポート」と呼ばれます。 256未満の数値は、アプリケーション層で実行されるパブリック(標準)サービス用に予約されています。次にいくつか例を示します。SMTPの場合は25、DNSの場合は53(ドメイン解決の場合はudp、ゾーン転送の場合はtcp)、HTTPの場合は80です。 256〜1023のポート番号は、IANAによって、販売するアプリケーションの会社に割り当てられます。

1024から65,535までのポート番号は、クライアント側のアプリケーション(たとえば、このページを読むために使用しているWebブラウザー)に使用されます。 Windowsは、最大5000のポート番号のみを割り当てます。これは、WindowsベースのPCに十分な数のポート番号です。各アプリケーションには、トランスポート層によって割り当てられた一意のポート番号があり、データがトランスポート層で受信されると、どのアプリケーションにデータを提供するかがわかります。たとえば、複数のブラウザウィンドウが実行されている場合です。各ウィンドウはWebサーフィンに使用するプログラムの個別のインスタンスであり、各ウィンドウには異なるポート番号が割り当てられているため、1つのブラウザーウィンドウでwww.dalantech.comにアクセスでき、このサイトは別のサイトに読み込まれませんブラウザウィンドウ。タブ付きウィンドウを使用するFireFoxのようなアプリケーションでは、各タブに一意のポート番号が割り当てられているだけです

インターネット層

...ネットワークをつなぐ「接着剤」です。データの送信、受信、およびルーティングを許可します。

ネットワーク層

...ネットワークインターフェイスカード(NIC)とそれに接続されているケーブルで構成されています。データの送受信に使用されるのは物理メディアです。ネットワーク層は、前述のように、アドレス指定にメディアアクセス制御(MAC)アドレスを使用します。 MACアドレスは、インターフェースが製造された時点で固定されており、変更できません。 PCのNICのMACアドレスを複製できるDSLルーターなど、いくつかの例外があります。

詳細情報:

68
OMG Ponies

ブラウザは、最初にDNSを介してサーバー名をIPに解決します。次に、TCP Webサーバーへの接続を開き、HTTP経由で通信しようとします。通常はTCPポート80上にありますが、別のポートを指定できます(http://server:portnumber)。

HTTPは次のよ​​うになります。

接続されると、次のようなリクエストを送信します。

GET /site HTTP/1.0
Header1: bla
Header2: blub
{emptyline}

たとえば、ヘッダーはAuthorizationまたはRangeです。詳細については、 here を参照してください。

その後、サーバーは次のように応答します。

200 OK
Header3: foo
Header4: bar

content following here...

たとえば、ヘッダーはDateまたはContent-Type。詳細については、 here を参照してください。

このプロトコルの詳細については、 Wikipedia for HTTP をご覧ください。

18
Albert

質問の各側面の仕様へのリンクは次のとおりです。

  • GET、POST verbs(とりわけ))-HTTP仕様はすべての側面を徹底的に議論しますHTTP通信(Webサーバーとブラウザ間の通信用プロトコル)で、要求メッセージと応答メッセージのプロトコルについて説明しています。

  • Cookies-Set-Cookie HTTP応答へのHTTPヘッダー。

  • QueryStrings-「?」の最初の出現に続くHTTPリクエストのURLの一部キャラクター。リンクされた仕様は、URI仕様のセクション3.4用です。

  • セッション-HTTPは同期のステートレスプロトコルです。セッション、または状態の錯覚は、(1)Cookieを使用して状態データをクライアントのコンピューターにプレーンテキストとして格納する、(2)URLのデータ値とリクエストのクエリ文字列を渡す、(3)submit = POST状態を示す値のコレクションを含むリクエスト、および(4)セッションキーによって取得されるサーバー側永続化メカニズムによる状態情報の保存(セッションキーは、 Cookie、URL/QuerystringまたはPOST値のコレクション。

HTTPの説明は何日も続くことがありますが、簡潔でありながら概念的に完全な答えを提供しようとし、公式仕様をさらに読むための適切なリンクを含めました。

16
smartcaveman

Webは標準(ポート80)に基づいているため、ブラウザーはTCP/IPの上にあります。ブラウザーが実行されているコンピューターgoogle.comなどのアドレスを入力すると、 OSI標準に従って各レイヤーでカプセル化されたデータ(異なるサイズのエンベロープを考えて、次のサイズの各エンベロープにパック)、OSIは7つのレイヤーを定義し、エンベロープの1つには送信元アドレスと宛先アドレスが含まれます(つまり、ウェブサイト)バイナリでエンコードされています。

OSIの用語で第1層に到達すると、メディア送信機(ケーブル、DSLなど)を介して送信されます。

ISPを介して接続している場合、エンベロープのレイヤーパックは、ISPのネットワークシステムであるISPに送信され、アドレスを見つけるために逆順でデコードすることにより、エンベロープレイヤーのパックを覗き込み、ISPはドメインネームシステムデータベースをチェックしますそのアドレスへのルートがあるかどうかを確認する(メモリにキャッシュされている場合は、インターネットネットワークを介して転送します-再びエンベロープの層状パック)。

そうでない場合、ISPはトップレベルのDNSサーバーに問い合わせて、「ねえ、あなたから提供されたアドレスのルートを教えてください。ブラウザ」、最上位DNSサーバーはISPにルートを渡し、ISPのサーバーメモリに保存されます。

エンベロープの階層化されたパックは、パケットのルーティングが成功した後にWebサイトサーバーによって送受信されます(サーバーに到達するための道順としてルーティングを考えてください)。 「あぁ、それは私のためです、そうです、私は宛先アドレス(つまり、あなたのブラウザ)を知っています、そしてサーバーはウェブページをパケット化された階層化されたエンベロープにパケット化し、それを送り返します(通常は逆ルートですが、常にではありません)場合)。

ブラウザは、パケット化されたエンベロープを受け取り、それぞれをアンパックします。その後、コンピューターはデータのデスクランブルを行い、ブラウザーは画面上のページをレンダリングします。

この回答があなたの理解に十分であることを願っています。

8
t0mm13b
7
cMinor

Webサーバーに依存しますが、クライアント側からどのように見えるか疑問に思っている場合は、Firefoxの場合は Live Headers および Firebug をインストールするだけです。 firebugのネットタブとライブヘッダーが開いていると、2つの相互作用が正確に明確になります。

行き来する実際のデータをさらに詳しく調べるには、 wireshark を使用します。

4
Stefan Kendall

charles という名前のサーバーとクライアント間のあらゆる種類のトラフィックを見ることができる興味深いロゴのある商用製品があります。

別のオープンソースツールには、 Live HttpHeadersWireshark 、または Firebug が含まれます。

3
miku

ブラウザーとWebサーバー間の通信は、この質問に答えることが不可能に近い非常に多くのレベルで行われます。 HTTPは役割を果たしますが、HTTPにはTCPがなければ意味がありません。これはIPがなければ意味がなく、送信先の物理ネットワークがなければ意味がありません。次に、POST対GETリクエストがありますが、これらは似ていますが、特別な議論を保証するのに十分な違いがあります。 HTTP要求を認証する必要がある場合もあれば、認証する必要がない場合もあります。 MIMEタイプについて言及する必要があります。次に、プロキシが存在する場合、ブラウザは別のリクエストを送信します。また、エンコーディングも役割を果たします。したがって、この種の質問に対する最も簡潔な答えは、ブラウザーがサーバーにデータを要求し、サーバーが要求されたデータをブラウザーに提供することだと思います。

2