HTTP代理协议 HTTP/1.1的CONNECT方法

我们平时使用HTTP协议无非就是GET、POST这些方法,但是HTTP的内容远不止那些。今天就来说说HTTP代理使用的CONNECT。这个不是在网页开发上用的,如果没兴趣就跳过吧。
  APACHE只是作为网页的服务器被使用的,不会支持这个方法。如果要使用它必须在服务器上安装相应的软件。这样的软件很多,百度一下HTTP代理服务器就可以找到一大把。
  CONNECT这个方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。这样用户就可以访问到一些只有服务器上才能访问到的网站了,这就是HTTP代理。说到代理,我想各位在党的旗帜下成长的同学都不会陌生吧。我们使用的网络被称为天朝局域网,它离Internet还有很长的一段路要走。所以,我们就必须越过重重坎坷去摸一摸这个世界本来的样子。哎呀,不小心又扯了一下蛋。下面来说说这个CONNECT方法的用法。
  CONNECT方法是需要使用TCP直接去连接的,所以不适合在网页开发中使用,不过网页开发中也用不到这玩意儿。要是使用CONNECT方法,首先要让服务器监听一个端口来接收CONNECT方法的请求。这个是服务器软件做的事情,我们只要配置好它就可以了,除非你闲着无聊想自己实现一个这样的服务器。在服务器监听了端口以后就是客户端的请求,我们必须告诉代理服务器我们想要访问哪个Internet服务器。假如我想通过代理访问这个博客(www.web-tinker.com),我就需要建立一个TCP连接,连接到服务器监听的那个端口,然后给服务器发送一个HTTP头。下面就是这个HTTP头的内容:

CONNECT www.web-tinker.com:80 HTTP/1.1
Host: www.web-tinker.com:80
Proxy-Connection: Keep-Alive
Proxy-Authorization: Basic *
Content-Length: 0

  所有的HTTP头都是类似的,第一行是方法名、主要参数、HTTP版本。接着一行一个参数,最后用两个换行来结束。这个HTTP头其实也没什么好介绍的,唯一一个重点的地方就是星号的部分,这个地方应该填写验证的用户名和密码。而且,用户名和密码也是有固定格式的。要把用户名和密码用冒号连接起来,再经过BASE64的编码后才可以使用。假如用户名是abc密码是123,那么星号的地方就应该换上YWJjOjEyMw==,也就是abc:123经过BASE64编码的结果。
  发送完这个请求之后,就是服务器端响应请求了。如果用户名和密码验证通过,就会返回一个状态码为200的响应信息。虽然状态码是200,但是这个状态描述不是OK,而是Connection Established。
HTTP/1.1 200 Connection Established

  如果用户名和密码验证不通过。会返回一个407的状态码,状态表述是Unauthorized。表示没有权限访问代理服务器。
HTTP/1.1 407 Unauthorized

  验证失败的情况有时候还会带上一堆HTML,这是有些服务器为了让网页上在连接失败是显示用的,如果不是通过浏览器来连接的话无视就好了。无论验证成功还是验证失败,这些服务器返回的信息在不同的服务器软件上会有一些差异。比如有些服务器软件返回这些代码会使用HTTP/1.0,有些则会在后面加上个代表服务器版本的字段。这些信息都无所谓,对于服务器返回的数据,我们关键是看状态码。
  验证通过之后,我们就可以做普通的HTTP操作了。完全可以把现在的代理服务器看作是请求连接的Internet服务器,也就是说可以像直接访问普通的服务器一样,使用GET、POST等方法来请求Internet服务器上的页面了。我们在发送CONNECT请求的时候就已经告诉了服务器我们需要访问的Internet服务器,上面我用了这个博客的网址。现在我们要访问这个博客的主页就可以发送一个简单的GET请求。

GET / HTTP/1.1
Host: www.web-tinker.com
Content-Length: 0

  这个就是普通的GET请求的操作了,我就不多说了,这样CONNECT方法的操作就完成了。假如哪天这个博客被墙了,就可以通过这个方式来访问。但是道高一尺魔高一丈,天朝的和谐技术已经不仅仅在与IP屏蔽上了。如果使用HTTP代理访问youtube这种超级和谐的网站就会被拦截下来,毕竟HTTP是明文传输的,不仅是域名,只要网站中有和谐字眼的都会被拦截。所以,这个HTTP代理只能访问一些被屏蔽了IP,但是没有被和谐的太严重的网站。如果需要逃过天朝的网络监视就必须使用加密的连接方式,比如SOCK5代理或者加密的VPN。总之,注意和谐吧。

时间: 2024-11-03 12:15:38

HTTP代理协议 HTTP/1.1的CONNECT方法的相关文章

connect方法详解

export default connect( state => ({ counter: state.counter }), )(Counter); connect方法详解: 首先将它改写成为普通函数的写法: export default connect(function(state){ //这里的参数state就是connect接收的外部传入的state. //connect方法接受两个参数:mapStateToProps和mapDispatchToProps,而这里的参数state实际是ma

react-redux的connect()方法

容器组件使用 connect() 方法连接 Redux 我们用 react-redux 提供的 connect() 方法将"笨拙"的 Counter 转化成容器组件.connect() 允许你从 Redux store 中指定准确的 state 到你想要获取的组件中.这让你能获取到任何级别颗粒度的数据. 让我们看下,我们拥有一个 的展示组件,它有一个通过 props 传过来的值,和一个函数 onIncrement,当你点击 "Increment" 按钮时就会调用这个

C# 给TcpClient的Connect方法设置超时时间

var client = new TcpClient(); var result = client.BeginConnect("remotehost", this.Port, null, null); var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1)); if (!success) { throw new Exception("Failed to connect."); } //

Swift - 创建代理协议实现页面间参数传递和方法调用

在开发中,经常需要用到协议代理模式.比如,进入编辑页面修改数据后,将新数据回传到主界面. 下面通过一个样例来说明协议代理模式,功能如下: 1,主页面有一个标签和一个修改按钮,点击修改按钮会跳转到编辑页面 2,编辑页面中修改输入框的文字后,点击“确定”则返回主页面,同时主页面的标签值会替换成新值 3,如果点击编辑页面的“取消”按钮则直接返回主页面 效果图如下: 实现过程: 1,首先在storyboard中绘制如下两个界面,同时将主界面的“修改”按钮与编辑页做present modally关联 2,

HTTP协议小结

目录 预备知识2 数据转发2 数据缓存3 HTTP协议的请求方法3 请求方法:4 HTTP报文结构解析5 内容编码6 分块传输编码*7 多部分对象集合*8 范围请求(断点续传)8 内容协商9 HTTP状态码10 HTTP 首部字段11 通用首部字段11 请求首部字段13 响应首部字段15 实体首部字段16 为Cookie服务的首部字段16 其他首部字段*17 HTTPS协议18 HTTP认证19 HTTP的扩展协议*21 预备知识 HTTP协议属于TCP/IP协议族应用层的协议. 当前最新的HT

http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)

根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP的1.0版本中只有三种请求方法: GET, POST 和 HEAD方法.到了1.1版本时,新增加了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法. GET 请求指定的页面信息,并返回实体主体.GET请求请提交的数据放置在HTTP请求协议头中,GET方法通过URL请求来传递用户的输入,GET方式的提交你需要用Request.QueryString来取得变量的值.GET方法提交数据,可能会带

[转帖]HTTP请求方法:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

平时的Rest开发,用到的都是GET,POST,PUT,DELETE类型的请求. 但Rest支持的请求类型不止前面4种,还有其他几种. 下面部分转自: https://www.html.cn/archives/9341 https://www.cnblogs.com/lnlvinso/p/11000568.html 超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的传输层.HTTP客户端会根据需要构建合适的HTTP请求方

HTTP代理协议梳理

HTTP代理协议 两种方式均在squid代理模式下抓取. 1.第一种,一般在直连服务端口时使用,比如指定80 或者8080 等非加密端口(如433) 抓包browser->squid: GET http://xxx.cn/ HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, applicatio

node-mongo-native1.3.19连接mongo的最优方法

最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下 选择Driver 首先,基本上有4个常见的driver供选择 1.官方的是node-mongo-native 2.基于node-mongo-native,封装的mongoose,是一个ODM小框架 3.kiss小组同样基于node-mongo-native封装的mongoskin 4.mongojs mongoose要求使用Document Schema,我们目前没有这个需求,所以不想用:mongoskin网上评价还可以,但是