web-dev-qa-db-ja.com

プロキシはどのように正確に機能しますか?

たとえば、IP 100.100.100.100、ポート80に接続したい場合、コンピュータはこのアドレスを含むtcpパケットをワイヤに送信します。

ここで、プロキシサーバーを使用する場合、200.200.200.200ポート8080(Internet Explorerで設定できるようなプロキシ)とすると、このプロセスはどのように変更されますか?

それでも同じIPに接続したい場合、IPヘッダーには宛先IPまたはプロキシIP、あるいはその両方が含まれますか?

私はすでにグーグルしました、プロキシを設定する方法を説明する何百ものページがありますが、それが内部でどのように動作するかを説明するものはありません。

12
cody

HTTP要求は、クライアントからプロキシサーバーのポート8080に送信されます。次に、Proxy Serverは新しいHTTP要求を宛先サイトに発信します。プロキシは、構成に応じて、HTTPリクエストに「X-Forwarded-For」ヘッダーを追加することがよくあります。宛先WebサイトのログファイルにはプロキシのIPアドレスが表示されますが、「X-Forwarded-For」アドレスを記録するように設定されている場合とされていない場合があります。

これが一般的な構成ですが、プロキシソフトウェアを使用すると、あらゆる種類のカスタマイズが可能になります。

編集:私が最初にあなたの質問を読んだとき、私はあなたが特にイカやnginxなどのHTTPプロキシについて尋ねているという考えを得たことに注意すべきですさまざまな種類のプロキシを利用できます。 Internet Explorerでは、おそらくHTTPプロキシを使用しますが、他にも多くの種類があります。

13
emgee

HTTPはレイヤ7プロトコルなので、混乱しないでください。 HTTPプロキシを使用し、「google.com」と入力すると、HTTPヘッダーはgoogle.comのままですが、宛先IPアドレスはプロキシのIPアドレスになり、ソースはホストIPからカスタマイズされたポート番号8080になります。

2
user205246

HTTPプロキシを使用するには、要求は宛先サーバーではなく、クライアントからプロキシサーバーのIPアドレスに送信されます。 プロキシはHTTPヘッダーを読み取ってrequest-URIを抽出する必要があります。 request-URIには宛先サーバーの名前またはIPが含まれ、プロキシサーバーはその情報を使用して要求を転送します。

HTTP仕様 を使用すると、プロキシーが使用されていない場合に、要求行でサーバー名とポートを除外できます(要求がそのサーバーに直接送信された場合は必要ないため)。しかし、仕様に従って...

リクエストがプロキシに対して行われている場合、absoluteURI形式が必要です。

したがって、プロキシを使用しない場合、リクエスト行は次のようになります。

GET /robots.txt HTTP/1.1

ただし、プロキシを使用するには、行にサーバー名(および80でない場合はポート)を含める必要があります。

GET http://httpbin.org:80/robots.txt HTTP/1.1

プロキシサーバーは事前に確立されたリクエストソケットを介して逐語的応答を単純に中継する場合があるため、操作が単純な場合の応答側。

1
nobar