与实施HTTP网络服务器相比,如何实施HTTP代理,有什么区别?是否有关于此主题的权威指南或RFC或有用的书籍?
答案 0 :(得分:24)
发送给代理的标头不同。
例如,以下是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不关心更高级的协议,你只需告诉它主机和端口。
答案 1 :(得分:17)
答案 2 :(得分:7)
代理与服务器非常相似;唯一的区别是,在解析请求之后,它只是转发它并返回结果*,而不是处理请求本身。因为代理不需要像普通服务器那样进行相同数量的处理,所以它通常可以比完整的服务器更少地解析请求,但是否则它是相同的想法。
*某些代理实现了额外的缓存。有些人还会回应/请求,但这是一种邪恶的代理,希望你没有考虑到。