HTTP CONNECT 方法
HTTP CONNECT 方法,代理(Proxy),隧道(Tunnel),反向代理,TCP协议,connect是通过TCP连接代理服务器的,Proxy-Authorization(身份验证的凭证),
目录
隧道/代理
在 HTTP 协议中,CONNECT 方法可以开启一个客户端与所请求资源之间的双向沟通的通道。它可以用来创建隧道(tunnel)。
例如,CONNECT 可以用来访问采用了 SSL (en-US) (HTTPS) 协议的站点。客户端要求** 代理 **服务器将 TCP 连接作为通往目的主机隧道。之后该服务器会代替客户端与目的主机建立连接。连接建立好之后,代理服务器会面向客户端发送或接收 TCP 消息流。
CONNECT 是一个应用范围为点到点的方法。
————————————————
版权声明:本文为CSDN博主「二十克」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
重点:
隧道:Tunnel
代理: Proxy
在我们开发普通应用的时候,涉及到HTTP服务器的请求,通常都会使用代理的方式,原因嘛,可能基于保护服务器(通常是 服务器反向代理),或者用户的受限,比如只能通过公司网关访问网络(通常是正向代理),但是这两种通常我们都归于 普通代理的范畴,就是有一个代理服务器作为中间商,拿到数据包,解析http数据包,然后代为转发一个http请求。
于此不同的是,我们的Tunnel-proxy 隧道代理。和普通代理的应用层协议不同的是:隧道代理使用TCP协议。
隧道代理通过HTTP协议正文部分(Body)完成通讯,以HTTP的方式实现任意基于TCP的应用层协议的代理
隧道代理原理:HTTP客户端通过CONNECT方法请求隧道代理创建一条到达任意目标服务器和端口的TCP连接,并对客户端和服务端之间的后续数据进行盲转发。
忙转发就是代理服务器看到的报文都是加密的数据,不是明文!
图解:
- 客户端端发送CONNECT报文信息,即上图的a
- 代理服务器即上图的网关,通过客户端提供的请求地址和端口,来与目标服务器建立TCP连接隧道,即上图的b
- 连接建立成功之后,服务端返回HTTP/1.* 状态码 描述 形式的报文信息即上图的d,返回给客户端。此时就建立起了双向通道
- 客户端和服务端可以通过隧道代理来发送任意数据,直到任意一方关闭连接,在此中间发送的数据都是加密的,代理服务器是不能解密的!
- 代理服务器只维护 代理到服务器的 TCP连接,并直接转发数据包,并不做拆包解析等处理。
使用
在HTTP中常用的方法有get,post,head。但也有很多不常用的method,其中就包括connect。
1、HTTP代理使用的就是connect这个方法,connect在网页开发中不会使用到。
2、connect的作用就是将服务器作为代理,让服务器代替用户去访问其他网页(说白了,就是翻墙),之后将数据返回给用户。
3、connect是通过TCP连接代理服务器的。假如我想告诉代理服务器我想访问wenmingxing - 简书网站,就需要首先建立起一条从我的客户端到代理服务器的TCP连接,然后给代理服务器发送一个HTTP报文:
客户端发送请求报文
CONNECT https://www.jianshu.com/u/f67233ce6c0c:80 HTTP/1.1
//或者
CONNECT https://www.jianshu.com/u/f67233ce6c0c:80 HTTP/1.0
当服务端返回407状态码,表示需要服务端提供授权码!这个时候就需要代理发送Proxy-Authorization数据!
Proxy-Authorization: basic aGVsbG86d29ybGQ=
Proxy-Authorization 是一个请求首部,其中包含了用户提供给代理服务器的用于身份验证的凭证。这个信息通常是在服务器返回了 407 Proxy Authentication Required 响应状态码及 Proxy-Authenticate 首部后发送的。
状态码 407 Proxy Authentication Required 代表客户端错误,指的是由于缺乏浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server )要求的身份验证凭证,发送的请求尚未得到满足。
这个状态码会与 Proxy-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
407 Proxy Authentication Required
客户端发送响应报文
在发送完这个请求之后,代理服务器会响应请求,返回一个200的信息,但这个200并不同于我们平时见到的OK,而是代表连接建立了。
HTTP/1.1 200 Connection Established
或者
HTTP/1.0 200 *******
//******* 和状态码不是固定的!可以自定义!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)