web-dev-qa-db-ja.com

HTTPプロキシはどのようにHTTPプロトコルを利用しますか?プロキシRFC?

HTTP Webサーバーの実装と比較して、HTTPプロキシの実装はどのように行われますか違いは何ですか?この主題に関する決定的なガイド、RFC、または役立つ本はありますか?

30
unixman83
17
caf

プロキシに送信されるヘッダーが異なります。

たとえば、以下はGoogleから送信されるものですChrome=プロキシサーバー経由でwww.baidu.comに送信されます:

GET http://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8

私たちはそれを見ることができます

GET http://www.baidu.com/ HTTP/1.1

の代わりに

GET / HTTP/1.1

そしてここに

Proxy-Connection: keep-alive

また

Host: www.baidu.com

ホストフィールドは必須で、httpプロキシの場合です。

HTTPSトンネルプロキシの場合:

CONNECT comet.zhihu.com:443 HTTP/1.1
Host: comet.zhihu.com:443
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

見える

CONNECT comet.zhihu.com:443 HTTP/1.1

domain:443ではなくhttps://domain

CONNECTフィールドは、プロキシサーバーをTCPトンネルのようなものに変え、プロトコルHTTPSはポート:443に置き換えられます。

Socks5プロキシの場合、物事は簡単になります。socks5は上位プロトコルを気にしないため、ホストとポートを指定するだけです。

27
wyj

プロキシはサーバーによく似ています。唯一の違いは、リクエストを解析した後、リクエスト自体を処理するのではなく、単に転送して結果*を返すことです。プロキシは通常のサーバーと同じ量の処理を実行する必要がないため、完全なサーバーよりもはるかに最小限の要求の解析で済むことがよくありますが、それ以外は同じ考えです。

*一部のプロキシは追加のキャッシュを実装しています。応答/要求に不満を感じる人もいますが、それは悪意のあるプロキシの一種であり、うまくいけないことを願っています。