web-dev-qa-db-fra.com

Comment un proxy HTTP utilise-t-il le protocole HTTP? un RFC proxy?

Comment procéder pour implémenter un proxy HTTP par rapport à l'implémentation d'un serveur Web HTTP, quelles sont les différences? Existe-t-il un guide définitif ou RFC ou un livre utile sur ce sujet?

30
unixman83

Les exigences sur les serveurs proxy HTTP sont spécifiées dans

RFC7230 - Hypertext Transfer Protocol (HTTP/1.1): Syntaxe et routage des messages

17
caf

L'en-tête envoyé à un proxy est différent.

Par exemple, voici ce qui est envoyé par Google Chrome à www.baidu.com via un serveur proxy:

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

Nous pouvons voir que c'est

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

au lieu de

GET / HTTP/1.1

et voici

Proxy-Connection: keep-alive

aussi

Host: www.baidu.com

Le champ hôte est obligatoire pour le proxy http.

Pour le proxy tunnel 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

Nous pouvons voir

CONNECT comet.zhihu.com:443 HTTP/1.1

domain:443 au lieu de https://domain.

Le champ CONNECT transforme le serveur proxy en quelque chose comme un TCP, puis le protocole HTTPS est remplacé par le port :443

Pour le proxy socks5, les choses deviennent faciles, car socks5 ne se soucie pas du protocole supérieur, vous lui dites simplement Host et port.

27
wyj

Un proxy est très similaire à un serveur; la seule différence est qu'après avoir analysé la demande, il la transmet simplement et renvoie le résultat *, plutôt que de traiter la demande elle-même. Parce que le proxy n'a pas à effectuer la même quantité de traitement qu'un serveur normal, il peut souvent s'en tirer avec une analyse des demandes beaucoup plus minimale qu'un serveur à part entière, mais sinon c'est la même idée.

* Certains proxys implémentent une mise en cache supplémentaire. Certains ont également été confrontés à la réponse/demande, mais c'est le mauvais type de proxy, que vous n'avez, je l'espère, pas en tête.

7