最近使用Charles抓https包时,发现get和post方式的请求都能抓到,但是method为connect的就是抓不到。而且提示如下:

You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.

于是搜索connect方式与其他方式区别,才发现问题。以下内容系转载。

***以下内容系转载***


connect方法
http 1.1定义了8种方法,connect为其中之一,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
并非所有的http隧道支持connect方法,Http隧道分为两种:
1  不使用CONNECT的隧道
不使用CONNECT的隧道,实现了数据包的重组和转发。在Proxy收到来自客户端的Http请求之后,会重新创建Request请求,并发送到目标服务器,。当目标服务器返回Response给Proxy之后,Proxy会对Response进行解析,然后重新组装Response,发送给客户端。所以,在不使用CONNECT方式建立的隧道,Proxy有机会对客户端与目标服务器之间的通信数据进行窥探,而且有机会对数据进行串改。

2  使用CONNECT的隧道
而对于使用CONNECT的隧道则不同。当客户端向Proxy发起Http CONNECT Method的时候,就是告诉Proxy,先在Proxy和目标服务器之间先建立起连接,在这个连接建立起来之后,目标服务器会返回一个回复给Proxy,Proxy将这个回复转发给客户端,这个Response是Proxy跟目标服务器连接建立的状态回复,而不是请求数据的Response。在此之后,客户端跟目标服务器的所有通信都将使用之前建立起来的建立。这种情况下的Http隧道,Proxy仅仅实现转发,而不会关心转发的数据。这也是为什么在使用Proxy的时候,Https请求必须首先使用Http CONNECT建立隧道。因为Https的数据都是经过加密的,Proxy是无法对Https的数据进行解密的,所以只能使用CONNECT,仅仅对通信数据进行转发。
注意,proxy代理的是客户端发起的TCP连接,以下是wiki的解释                            
the client, using the "CONNECT" HTTP method, asks an HTTP Proxy server to forward the TCP connection to the desired destination. The server then proceeds to make the connection on behalf of the client. Once the connection has been established by the server, the Proxy server continues to proxy the TCP stream to and from the client. Note that only the initial connection request is HTTP - after that, the server simply proxies the established TCP connection.This mechanism is how a client behind an HTTP proxy can access websites using SSL (i.e. HTTPS).
http://en.wikipedia.org/wiki/HTTP_tunnel

与proxy相关字段
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段;  Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址(而非连接发起的原始IP地址),这样的代理服务器实际上充当了匿名服务提供者的角色,如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。
X-Forwarded-HostX-Forwarded-Proto分别记录客户端最原始的主机和协议。
Proxy-Authorization:连接到proxy的身份验证信息
Proxy-connection:它不是标准协议的一部分,标准协议中已经存在一种机制可以完成此协议头的功能,这就是Connection头域,与Proxy-Connection头相比,Connection协议头几乎提供了相同的功能,除了错误部分。而且,Connection协议头可用于任意连接之间,包括HTTP服务器,代理,客户端,而不是像Proxy-Connection一样,只能用于代理服务器和客户端之间。

http 1.1其余7种方法
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部份。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,
就可以获取其中“关于该资源的信息”(元信息或称元数据)。
GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被
网络蜘蛛等随意访问。
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
http://zh.wikipedia.org/zh-cn/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE

 

最新文章

  1. C++网络套接字编程TCP和UDP实例
  2. python GUI输入窗口
  3. 新手的第一个phonegap Android应用
  4. 介绍开源的.net通信框架NetworkComms框架之五 心跳检测
  5. [BTS]The join order has been enforced because a local join hint is used.;Duplicate key was ignored.".
  6. JNI 程序开发
  7. spring bean初始化顺序
  8. BroadcastReceiver
  9. vs212创建mvc3项目,添加ADO.NET实体数据模型时产生 XXXX.Desiger.cs 文件为空
  10. NAMESPACE
  11. poj 3252 Round Numbers 数位dp
  12. IOS 表视图(UITableVIew)的使用方法(7)表视图的编辑功能(拖拉调整排序位置)
  13. ThinkPHP - F函数,更新配置文件
  14. MongoDB基础教程系列--第七篇 MongoDB 聚合管道
  15. Android开发之漫漫长途 番外篇——自定义View的各种姿势2
  16. web服务器的原理
  17. mysql 中通过身份证号码计算年龄
  18. Docker技术应用场景(转载)
  19. (Beta)团队贡献分
  20. 细说java系列之注解

热门文章

  1. Spring注解测试
  2. Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案
  3. python 网站 监控返回值
  4. 主成分分析、实例及R语言原理实现
  5. activiti官网实例项目activiti-explorer之扩展流程节点属性2
  6. Linux 下安装 apache
  7. Linux 操作命令
  8. Android:得到WebView当前页的html源码
  9. Maven中聚合与集成的区别
  10. Day01 -Class类别 精选面试题