Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结

1. 普通代理1

1.1.1. 普通代理2

2. 隧道代理3

3. 反向代理 4

4. 正向代理也可以使用apache实现4

5. 参考5

HTTP 代理原理及实现(一)

文章目录

1. 普通代理

Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章,我打算谈谈 HTTP 代理本身的一些原理,以及如何用 Node.js 快速实现代理。

HTTP 代理存在两种形式,分别简单介绍如下:

第一种是 RFC 7230 - HTTP/1.1: Message Syntax and Routing(即修订后的 RFC 2616,HTTP/1.1 协议的第一部分)描述的普通代理。这种代理扮演的是「中间人」角色,对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报文。

第二种是 Tunneling TCP based protocols through Web proxy servers(通过 Web 代理服务器用隧道方式传输基于 TCP 的协议)描述的隧道代理。它通过 HTTP 协议正文部分(Body)完成通讯,以 HTTP 的方式实现任意基于 TCP 的应用层协议代理。这种代理使用 HTTP 的 CONNECT 方法建立连接,但 CONNECT 最开始并不是 RFC 2616 - HTTP/1.1 的一部分,直到 2014 年发布的 HTTP/1.1 修订版中,才增加了对 CONNECT 及隧道代理的描述,详见 RFC 7231 - HTTP/1.1: Semantics and Content。实际上这种代理早就被广泛实现。

本文描述的第一种代理,对应《HTTP 权威指南》一书中第六章「代理」;第二种代理,对应第八章「集成点:网关、隧道及中继」中的 8.5 小节「隧道」。

.作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

1.1.1. 普通代理

第一种 Web 代理原理特别简单:

HTTP 客户端向代理发送请求报文,代理服务器需要正确地处理请求和连接(例如正确处理 Connection: keep-alive),同时向服务器发送请求,并将收到的响应转发给客户端。

当然代理也可以修改 HTTP 请求头部,通过 X-Forwarded-IP 这样的自定义头部告诉服务端真正的客户端 IP。但服务器无法验证这个自定义头部真的是由代理添加,还是客户端修改了请求头,所以从 HTTP 头部字段获取 IP 时,需要格外小心。

2. 隧道代理

可以看到,浏览器与代理进行 TCP 握手之后,发起了 CONNECT 请求,报文起始行如下:

CONNECT imququ.com:443 HTTP/1.1

对于 CONNECT 请求来说,只是用来让代理创建 TCP 连接,所以只需要提供服务器域名及端口即可,并不需要具体的资源路径。代理收到这样的请求后,需要与服务端建立 TCP 连接,并响应给浏览器这样一个 HTTP 报文:

HTTP/1.1 200 Connection Established

浏览器收到了这个响应报文,就可以认为到服务端的 TCP 连接已经打通,后续直接往这个 TCP 连接写协议数据即可。通过 Wireshark 的 Follow TCP Steam 功能,可以清楚地看到浏览器和代理之间的数据传递:

可以看到,浏览器建立到服务端 TCP 连接产生的 HTTP 往返,完全是明文,这也是为什么 CONNECT 请求只需要提供域名和端口:如果发送了完整 URL、Cookie 等信息,会被中间人一览无余,降低了 HTTPS 的安全性。HTTP 代理承载的 HTTPS 流量,应用数据要等到 TLS 握手成功之后通过 Application Data 协议传输,中间节点无法得知用于流量加密的 master-secret,无法解密数据。而 CONNECT 暴露的域名和端口,对于普通的 HTTPS 请求来说,中间人一样可以拿到(IP 和端口很容易拿到,请求的域名可以通过 DNS Query 或者 TLS Client Hello 中的 Server Name Indication 拿到),所以这种方式并没有增加不安全性

3. 反向代理

还有一种情况是访问 A 网站时,实际上访问的是代理,代理收到请求报文后,再向真正提供服务的服务器发起请求,并将响应转发给浏览器。这种情况一般被称之为反向代理,它可以用来隐藏服务器 IP 及端口。一般使用反向代理后,需要通过修改 DNS 让域名解析到代理服务器 IP,这时浏览器无法察觉到真正服务器的存在,当然也就不需要修改配置了。反向代理是 Web 系统最为常见的一种部署方式,例如本博客就是使用 Nginx 的 proxy_pass 功能将浏览器请求转发到背后的 Node.js 服务。

通常是由apache实现

4. 正向代理也可以使用apache实现

#正向代理设置

ProxyRequests On

ProxyVia On

<Proxy *>

Order deny,allow

Deny from all

Allow from 127.0.0.1

</Proxy></VirtualHost>

现在看正向代理设置那一段

· ProxyRequests On:开启Apache正向代理

· ProxyVia On:控制位于代理服务器链中的代理请求的流向

  引用Apache2.2官方文档中对ProxyVia的解释如下:

00001.

a. 如果设置为默认值Off ,将不会采取特殊的处理。如果一个请求或应答包含"Via:"头,将不进行任何修改而直接通过。

b. 如果设置为On每个请求和应答都会对应当前主机得到一个"Via:"头。

c. 如果设置为Full ,每个产生的"Via:"头中都会额外加入Apache服务器的版本,以"Via:"注释域出现。

d. 如果设置为Block ,每个代理请求中的所有"Via:"头行都将被删除。且不会产生新的"Via:"头。

5. 参考

HTTP 代理原理及实现(一)   JerryQu 的小站.htm

Apache配置正向代理与反向代理 - Alexis_Liu - 博客园.htm

Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结相关推荐

  1. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结

    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 ...

  2. 部署haproxy代理,搭建基于nginx的高性能反向代理群集

    目录 一.Haproxy概述.简介 (1)Haproxy简介 (2)Haproxy和LVS.Nginx的比较 (3)Haproxy的代理模式 二.利用Haproxy+nginx搭建web群集 实验环境 ...

  3. 理解正向代理与反向代理的区别

    2019独角兽企业重金招聘Python工程师标准>>> 我们介绍了Nginx主要用来做反向代理,可能有些朋友并不很清楚什么是反向代理,本篇文章会介绍下反向代理和正向代理的不同之处: ...

  4. Nginx(二):反向代理原理 与 配置文件详解

    相关阅读: Nginx(一):Nginx原理概述 与 安装步骤详解 Nginx(二):反向代理原理 与 配置文件详解 Nginx(三):负载均衡策略 与 Nginx静态服务器 Nginx(四):Ngi ...

  5. 彻底理解正向代理和反向代理

    转载自 彻底理解正向代理和反向代理 平时工作中我们会接触到各种代理,它到底是什么概念呢,又是什么工作原理,下面我们具体来分析一下. 1.概念 正向代理 这个很好理解,比如说你现在要访问一个外国的社交网 ...

  6. 彻底理解正向代理、反向代理、透明代理

    套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术 ...

  7. HTTP 代理原理及实现

    Web 代理是一种存在于网络中间的实体,提供各式各样的功能.现代网络系统中,Web 代理无处不在.我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响.今天这篇文章,我打算谈谈 ...

  8. Nginx (一) Nginx介绍 正向代理 反向代理 及配置

    目录 介绍Nginx Nginx处理高并发 正向代理 正向代理配置 反向代理 反向代理配置 介绍Nginx Nginx是一款自由的.开源的.高性能的HTTP服务器和 反向代理 服务器:同时也是一个IM ...

  9. 浅析正向代理、反向代理、透明代理

    目录 0x01 前言 0x02 正向代理 2.1 正向代理Cache(缓存)技术 0x03 反向代理 3.1 反向代理Cache(缓存)技术 0x04 透明代理 0x01 前言 之前对这三种代理模式模 ...

  10. Nginx代理——正向、反向代理,动静分离和负载均衡

    文章目录 一.Nginx代理概述 (1)什么是正向代理和反向代理 -正向代理: -反向代理 -反向代理和正向代理的区别 (2)配置代理 -Nginx代理配置语法 -配置正向代理 -Nginx反向代理示 ...

最新文章

  1. python 倒计时_用Python帮你远离猝死悲剧
  2. 火了!16岁高中生做的 Python 3.9 八大新特性图
  3. timertask run函数未执行_图执行模式下的 TensorFlow 2
  4. 异步非阻塞_细说同步异步、阻塞非阻塞
  5. 精益创业~如何驾驭愿景
  6. linux系统需要备份吗,准备好了吗?请备份你的Linux系统
  7. 图像风格迁移(Neural Style)简史
  8. Dijkstra算法C++实现
  9. 电商网站开发设计方案、电商网站开发重要性
  10. 【Tensorflow踩过的坑儿】pb转pbtxt
  11. 利用BP神经网络求解非线性方程组
  12. 实用的Chrome插件推荐
  13. 基于linux的mplay的mp3程序,mplay_mxplayer播放器1.8.11_linux 视频播放器
  14. Office显示未授权,需要激活这种情况应该怎么处理
  15. c#中文件路径出现非法字符怎么办?解决也容易
  16. Python的布尔类型和True/False的各种形式
  17. isEnable() 和 isDisplayed() 和 isSelected()
  18. css文字换行时对不齐,css小技巧 - 换行对齐
  19. 未来10年,最值得创业的行业是什么?
  20. 读取linux分区工具,Windows XP下直接读取Linux ext4分区文件工具

热门文章

  1. 人眼分辨 PPI_1080P=2K,分辨率≠清晰度?关于显示器大多数人都错了
  2. geany怎么创建文件夹_在visual studio中创建win32应用程序
  3. 广东自考计算机专业在校生,2020年4月广东自考计算机及应用专业计划及课程设置(B080702本科)...
  4. Spring Boot中自动注入没有生效,报NullPointer的问题
  5. jquery dropload
  6. centos ip地址固定
  7. linux下通过文件句柄恢复误删除的数据文件
  8. 互联网产品需求管理思考——统一需求管理
  9. [转贴]Unix-Center.Net需要您的帮助
  10. 【目录】数据结构与算法