HTTP代理与SPDY协议概述

HTTP代理是最经典最常见的代理协议。其用途非常广泛,普遍见于公司内网环境,一般员工都需要给浏览器配置一个HTTP代理才能访问互联网。起初,HTTP代理也用来翻越G*W,但是因为G*W不断发展,普通的HTTP代理早已无效了。但是,基于仍然有不少人使用明文的HTTP代理协议结合 stunnel之类的软件进行加密翻Q,有时这种代理又被称为HTTPS代理。再后来,又出现了WebVpn via Spdy之类的代理协议,特点是Chrome浏览器直接支持。再加上HTTP代理协议可以代理什么?是只能代理HTTP还是也可以代理HTTPS,还是可 以用来实现SOCKS代理?总之,非常混乱。在fqsocks项目里用python实现了HTTP代理的各种主流变种,终于明白了不同称谓之后的真正含义。本文试图总结一二。

代理基础

所有的代理,其原理都是类似的。其网络拓扑结构都是这样的:

[客户端] <-TCP连接-> [代理] <-TCP连接-> [服务器]

代理左手拿着与客户端的连接,右手拿着与服务器的连接,然后在两个TCP连接之间做数据的对拷。各种不同的代理协议,不同的只是TCP连接之上跑的 是什么的协议,数据是怎么经过包装,拆包的。不存在客户端与服务器之间建立TCP连接的情况。只有VPN这种在IP包这一层工作的,才能实现客户端与服务 器的之间连接。

HTTP流量,明文的代理连接

这是最简单的一种HTTP代理。其工作方式是客户端与代理之间建立的TCP连接是明文的,也就是不经过SSL加密的。在TCP连接中传输的数据就是 明文的HTTP的POST和GET这些。对于这种代理工作方式,客户端发给服务器的包几乎不用修改发给代理,就可以获得几乎与服务器一样的返回。其收发包 过程如下

[客户端] -HTTP GET-> [代理] -HTTP GET-> [服务器]
[客户端] <-200 OK [代理] <-200 OK [服务器]

HTTPS流量,明文的代理连接

在这种工作方式中,客户端与代理之间建立的TCP连接仍然是明文的,也就是不经过SSL加密的。但是客户端发出的请求不是HTTP请求,而是 HTTPS请求。因为HTTPS请求是经过SSL加密的,所以做为代理来说,虽然客户端与其建立的TCP连接本身没有经过SSL加密,但是中间传输的数据 确是SSL加密的。于是代理就无法通过检查HTTPS请求的内容知道目的服务器是什么。所以客户端必须在发HTTPS请求之前用HTTP CONNECT请求告诉代理要连接的服务器是什么,然后等代理服务器左右手的TCP连接都握稳了,客户端就可以收发HTTPS流量了。代理在其中只是一个 简单的在两个TCP连接中做数据对拷,并不知道客户端与服务器在干什么。事实上,利用HTTP CONNECT,客户端与服务器之间除了可以交换HTTPS的流量,任何流量都是可以的。经过HTTP CONNECT之后,客户端与代理的TCP连接就“相当于”是与服务器之间建立的TCP连接。当然我们前面已经说过了,这种直连只是一个假象。其收发包过 程如下:

[客户端] -HTTP CONNECT a.b.c.d:port-> [代理] -TCP SYN-> [服务器]
[客户端] <-200 OK- [代理] <-TCP SYN ACK- [服务器] # 这里的200 OK与下面的200 OK的含义不同
[客户端] -SSL CLIENT HELLO-> [代理] -SSL CLIENT HELLO-> [服务器] # SSL握手包1
[客户端] <-SSL SERVER HELLO- [代理] <-SSL SERVER HELLO/CERTIFICATE等- [服务器] # SSL握手包2
[客户端] -SSL CLIENT CERTIFICATE等-> [代理] -SSL CLIENT CERTIFICATE等-> [服务器] # SSL握手包3
[客户端] <-SSL SERVER FINISHED- [代理] <-SSL SERVER FINISHED- [服务器] # SSL握手包4
[客户端] -SSL加密的HTTP GET-> [代理] -SSL加密的HTTP GET-> [服务器]
[客户端] <-SSL加密的200 OK- [代理] <-SSL加密的200 OK- [服务器]

因为CONNECT之后,这个左右手的TCP连接里跑什么流量,代理是完全不管的,所以这样也是可以的:

[客户端] -HTTP CONNECT a.b.c.d:port-> [代理] -TCP SYN-> [服务器]
[客户端] <-200 OK- [代理] <-TCP SYN ACK- [服务器] # 这里的200 OK与下面的200 OK的含义不同
[客户端] -any request-> [代理] -any request-> [服务器]
[客户端] <-any response- [代理] <-any response- [服务器]

正因为CONNECT之后TCP连接可以用来跑任意的东西,当然也就可以用来再跑另外一个代理协议了,比如SOCKS代理。

只要SOCKS代理是运行在443这样HTTP CONNECT允许的端口,通过HTTP-CONNECT+SOCKS代理就可以在公司内网里访问HTTP之外的互联网内容了。

HTTP流量,SSL加密的代理连接

传统HTTP代理,客户端与代理之间是不经过加密的。因为GFW可以从明文的流量中知道你通过HTTP代理访问的目标服务器,所以可以从中切断连接。为了让HTTP代理协议继续承担翻墙的重任,人们发明一种新的方式。其拓扑结构如下

[客户端] <-TCP连接-> [Stunnel客户端模式] <-TCP over SSL连接-> [Stunnel服务器模式] <-TCP连接-> [代理] <-TCP连接-> [服务器]

虽然拓扑结构复杂了,但是概念其实是很简单的。因为客户端与代理都不直接支持SSL的TCP连接,所以通过Stunnel做一个转换,在客户端经过 Stunnel的客户端模式进行加密,然后在代理上有用Stunnel的服务器段模式进行解密。这样GFW夹在中间看到的是经过SSL加密的流量,无法进 行URL关键字过滤了。收发包的过程如下:

[客户端] -HTTP GET-> [Stunnel客户端模式] -SSL加密的HTTP GET-> [Stunnel服务器模式] -HTTP GET-> [代理] -HTTP GET-> [服务器]
[客户端] <-200 OK- [Stunnel客户端模式] <-SSL加密的200 OK- [Stunnel服务器模式] <-200 OK- [代理] <-200 OK- [服务器]

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索客户端
, 服务器
, http
, 协议
, http协议
, 客户端与服务器
, 代理
, http tcp
, http代理服务器
, http代理
, TCP代理
, 之间
, SPDY
代理https
spdy协议、http代理协议、http协议调试代理工具、socket http协议 代理、http代理 tcp协议,以便于您获取更多的相关知识。

时间: 2024-09-17 00:18:46

HTTP代理与SPDY协议概述的相关文章

HTTP代理与SPDY协议(转)

原文出处: fqrouter    HTTP代理是最经典最常见的代理协议.其用途非常广泛,普遍见于公司内网环境,一般员工都需要给浏览器配置一个HTTP代理才能访问互联网.起初,HTTP代理也用来翻越"功夫网",但是因为"功夫网"不断发展,普通的HTTP代理早已无效了.但是,基于仍然有不少人使用明文的HTTP代理协议结合stunnel之类的软件进行加密FQ,有时这种代理又被称为HTTPS代理. 再后来,又出现了WebVpn via SPDY 之类的代理协议,特点是Ch

Linux Mint下编译安装支持SPDY协议的Wireshark

做成脚本了,保存成文件,sudo ./xxx.sh即可. #!/bin/bash # 如果没有加sudo,提示错误并退出 if [ "x$(id -u)" != x0 ]; then echo "Error: please run this script with 'sudo'." exit 1 fi #安装依赖的源码和工具 sudo apt-get -yf install libssl-dev libpcap-dev git-core autoconf autom

《趣学CCNA——路由与交换》一2.3 网络层协议概述

2.3 网络层协议概述 趣学CCNA--路由与交换 网络层的协议不胜枚举,完全不可能一一进行介绍.在本节,我们会挑其中几个对网络行为产生极大影响的协议进行介绍. 话说回来,虽说网络层协议多如牛毛,但在众多网络层协议之中,有一个协议光辉太过耀眼,让人们几乎忘记了其他协议的存在.它的重要性是如此不容忽视,以至于它的名称叫做"互联网协议 ( Internet Protocol )",简称为IP协议.那么,让我们就从这个互联网协议说起吧. 2.3.1 IP介绍 在那个"模型们&quo

SPDY协议简介及如何编译含有SPDY的nginx

SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 (发音同"speedy"),以最小化网络延迟,提升网络速度,优化用户的网络使用体验.SPDY并不是一种用于替代HTTP的协议, 而是对HTTP协议的增强.新协议的功能包括数据流的多路复用.请求优先级,以及HTTP包头压缩.谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%.目前主流浏览器Google Chrome Mozilla Firefox Opera Internet Explorer都已经支

Facebook宣布支持谷歌SPDY协议

新浪科技讯 北京时间7月16日早间消息,Facebook工程师道格·比佛(Doug Beaver)上周宣布,该公司已经开始部署谷歌开发的SPDY协议.SPDY是"speedy"(迅速的)的缩写,目的是通过一种更快的网络内容传输协议取代HTTP.除了SPDY外,目前可用的第二代网络内容传输协议还包括HTTP Speed+Mobility和Network-Friendly HTTP Upgrade,但Facebook最终还是选择了SPDY,并计划在全球部署.SPDY最早由谷歌开发,除了可以

谷歌服务全面部署SPDY协议网页加载时间减半

北京时间4月13日上午消息,谷歌将在Gmail.Docs和YouTube等网络服务中全面部署SPDY协议, 对于Chrome浏览器的用户而言,可能已经在使用SPDY协议.谷歌最早于2009年11月推出了这一协议,希望借此提升网速.在此期间,谷歌已经逐步将该协议整合到Chrome浏览器中. SPDY其实是一个精简高效的HTTP版本,它可以通过一个TCP连接发出多个平行的数据流,但与此同时,还会为不同的内容提供不同的优先级,从而让HTML等关键内容首先显示出来,然后再处理JavaScript和视频等

使用支持SPDY协议的Wireshark截包(含spdyshark插件)

因为SPDY基于SSL/TLS,所以要分析出SPDY包,就需要能解密TLS,就得有SPDY服务器的私钥.所以只能分析自己搭的服务器的包. 本文基于前三篇文章,请先阅读: Linux Mint + Apache2.2搭建SSL/HTTPS/SPDY服务器 http://blog.csdn.net/hursing/article/details/20049381 Wireshark+Apache2.4解密SSLv3 http://blog.csdn.net/hursing/article/detai

《趣学CCNA——路由与交换》——2.3节网络层协议概述

2.3 网络层协议概述趣学CCNA--路由与交换网络层的协议不胜枚举,完全不可能一一进行介绍.在本节,我们会挑其中几个对网络行为产生极大影响的协议进行介绍. 话说回来,虽说网络层协议多如牛毛,但在众多网络层协议之中,有一个协议光辉太过耀眼,让人们几乎忘记了其他协议的存在.它的重要性是如此不容忽视,以至于它的名称叫做"互联网协议 ( Internet Protocol )",简称为IP协议.那么,让我们就从这个互联网协议说起吧. 2.3.1 IP介绍在那个"模型们"还

JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例,我们暂时不讲了,我们直接来重点吧,关于JAVA的网络请求是怎么实现的?当然是HTTP协议,但是不可否认,他的概念和思想都是我们必须去涉及的,包括后面的tcp和socket等,好吧,我们开车吧! 一.JAVA网络请求概述 关于JAVA的网络请求,我们大致的可以分为以下几个分类 网络模式 OSI TCP