HTTP-代理

HTTP-代理

web代理服务器是网络的中间实体,代理位于客户端和服务器之间,扮演者中间人的角色,在各端点之间来回传递http报文

web的中间实体

web上的代理服务器是代表客户端完成事务处理的中间人,如果没有web代理,http客户端直接和http服务器进行对话,有了代理,客户但就可以和代理进行对话,然后由代理代表客户端向服务器进行交流。客户端任然会完成对事务的处理。

私有和共享代理

代理服务器可以是某个客户端专用的,也可以是很多客户端共享的,单个客户端专用的代理称为私有代理,众多客户端共享的代理称为公共代理。

公共代理

大多数代理是公共的共享代理,集中式的代理成本效率更高,更容易管理,高速缓存代理服务器,会利用用户之间共同的请求,这样的话,汇入同一个代理服务器的用户越多,就越有用。

私有代理

专用的私有代理不常见,但是确实存在,尤其是直接运行在客户端计算机的时候,有的浏览器辅助产品,以及一些isp服务器,会在用户的pc上直接运行一些小型的代理,拓展浏览器的特性,提高性能。为免费的isp服务提供主机广告。
在这里插入图片描述

代理和网关的对比

代理连接的是两个或者多个使用相同协议的应用程序,而网关连接的是两个或者多个使用不同协议的端点。客户端和服务器使用的是不同的协议,客户端也可以通过它完成和服务器直接的事务处理。
在这里插入图片描述

代理和网关之间的区别很模糊,浏览器和服务器实现的是不同版本的http,代理也需要做一些协议转换工作,而商业化的代理服务器也会实现网关的功能来支持ssl安全协议,socks防火墙,ftp访问,以及基于web的应用程序

使用代理

代理服务器可以看到并接触到所有流过的http流量,所以代理可以监视流量并对其进行修改,以实现很多有用的增值web服务器。

  1. 儿童过滤器
    小学在为教育站点提供无阻碍访问的同时,可以利用过滤器代理来阻止学生访问成人内容

  2. 文档访问限制
    可以用代理服务器在大量的web服务器和web资源之间实现同一的访问控制策略,创建审核跟踪机制。
    在这里插入图片描述

  3. 安全防火墙
    网络工程师使用代理服务器来提高安全性,代理服务器会在网络中的歹意安全节点上限制应用层协议的数据可以流入或者流出一个组织,还可以提供来消除病毒的web和email代理使用的那种挂钩程序,以便对流量进行详细的检查
    web缓存: 代理缓存了常用文档的本地副本,并将它们按需提供,减少缓慢而昂贵的互联网通信
    反向代理:代理可以假扮web服务器,这些被称为替代物或者反向代理的代理接受发给web服务器的真实请求,但是和web服务器不同的是,可以发起对其他服务器的同行,以便可以按照需求定位所请求的内容。
    可以使用这些反向代理来提高访问慢速web服务器上公共内容时的性能,这种配置中,通常将这些反向代理成为服务器加速器,还可以将替代物和内容路由功能配合使用,以创建按按需复制内容的分布式网络。
    在这里插入图片描述

内容路由器: 代理服务器可以作为内容路由器使用,根据英特网的流量状况以及内容类型将请求导向特定的web服务器
内容路由器可以用来实现各种服务级的请求,如果用户或者内容提供者付费要求提供更高的性能,内容路由器可以将请求转发到附近的赋值缓存,如果用户申请了过滤服务,还可以通过过滤来转发http请求。
转码器: 代理服务器在将内容发送给服务器之前,可以修改内容的主体格式,在这些数据表示法之间进行的透明转码被称为转码
匿名者:匿名者会主动从HTTP报文中删除身份特征,比如客户端ip地址,from首部,referer首部,cookie,uri的会话id,从而提供高度私密性和匿名性

  1. 从user-agent首部删除用户计算机和os类型
  2. 删除from首部以保护用户的email地址
  3. 删除referer首部来掩盖用户访问过的其他站点
  4. 删除cookie首部提出概要信息和身份的数据。

代理去处

代理服务器的部署

出口代理

可以将代理固定在本地网络的出口点,方便控制本地网络和大型因特网之间的流量。

访问(入口)代理

代理常被放在isp访问点上,用来处理来自客户的去和请求,isp使用缓存代理来存储常用文档的副本,提高用户的下载速度,降低英特网的带宽耗费。

反向代理

代理通常会被部署在网络边缘,在web服务器之前,作为替代物使用,在这里可以处理所有传送给web服务器的请求,并不是旨在必要的时候向web服务器请求资源,替代物可以提高web服务器的安全特性,或者将快速的web服务器换缓存放在较慢的服务器之前,以提高性能,反向代理童话参观会直接冒用web服务器的名字和ip地址,这样所有的请求是发送给代理而不是服务器了。

网络交换代理

可以将具有足够的处理能力的代理放在网络之前的因特网对等交换点上,通过缓存来减轻英特网节点的拥塞,并对流量进行监视

代理的层次结构

可以通过代理层次结构将代理级联起来,在代理的层次结构中,会将报文从一个代理传给另一个代理,直到最终抵达原始服务器位置,然后通过代理传回给客户端
在这里插入图片描述

proxy层次结构中的代理服务器被赋予了父和子的关系,下一个入口代理(靠近服务器)被称为附带里,下一个出口代理靠近客户端被称为自带里,代理1是代理2的子代理,代理2是代理3的自代理,代理3是代理2的父代理

代理层次结构的内容路由

代理层次结构是静态的,代理1总是会将报文转发给代理2,代理2总是会将报文转发给代理3,但是层次不一定非得是静态的,代理服务器可以根据众多因素,将报文转发给一个不断变化的代理服务器和原始服务器集。

  • 如果所请求的对象属于一个付费使用内容分发服务的web服务器,代理就会将请求发送给附近的一个缓存服务区,这个服务器会返回已缓存对象,或者如果它没有的话,会取回内容。

  • 如果请求的是特定类型的图片,访问代理会将请求转发给一个特定的压缩代理,这个代理会获取图片,然后对其进行压缩,这样通过客户端的慢速modem下载,速度会更快。
    在这里插入图片描述

  • 负载均衡
    自代理可能会根据当前父代理上的工作负载级别来决定如何选择一个附带里,以负载均衡

  • 地理位置附近的路由
    子代理可能会选择负责原始服务器所在的物理区域的代理

  • 协议/类型路由
    子代理可能可能会根据URI将报文转发到不同的附带里和原始服务器上去,某些特定类型的URI可能要通过一些特殊的代理服务器转发请求,以便进行特殊的协议处理。

  • 基于订购的路由
    如果发布者为高性能服务额外付费了,它们的URI就会被转发到大型缓存或者压缩引擎上去,以提高性能

代理是如何获得流量的

客户端通常会直接和web服务器进行同i选哪个,所以想要解释清楚HTTP流量怎样才能首先流向代理,有四种常见的方式可以使得客户端流向代理。

  • 修改客户端
    很多web客户端,有手动和自动的代理配置,如果将客户端配置为使用代理服务器,客户端就会将HTTP请求有意的直接发送给代理,而不是原始服务器。
  • 修改网络
    网络基础设施可以通过若干种技术手段,在客户端不知道,或者是没有参数的情况下,拦截网络流量并导入代理,这种拦截通常是监视HTTP流量的交换设备和路由设备,在客户端毫不知情的情况下,对其进行拦截,并将流量导入一个个代理, 这种代理称为拦截代理。
  • 修改DNS的命名空间
    放在web服务器之前的代理服务器-替代物,会直接假扮web服务器的名字和ip地址,这样,所有的请求就会发送给这些替代物,而不是服务器了,要实现这一点,可以手动编辑DNS名称列表,或者用特殊的动态DNS服务器根据需要来确定适当的代理和服务器,在安装过程中,真实服务器的ip地址和名称被修改了,替代物得到的是之前的地址和名称。
  • 修改web服务器
    也可以将某些web服务器配置为客户端发送一条HTTP重定向命令,将客户端请求重定向到一个代理上去,收到重定向命令之后,客户端会和代理进行通信。
    在这里插入图片描述

客户端的代理设置

手工配置: 显示的设置要使用的代理
预先配置浏览器: 浏览器厂商或发行商会在将浏览器发送给其他客户之前预先对浏览器或者所有其他web客户端的代理设置进行手工配置。
代理的自动配置: 提供一个URI,指向一个JavaScript语言编写的代理自动配置文件,客户端会取回这个JavaScript文件,并运行它决定是否应该使用一个代理,如果是的话,应该使用哪个代理服务器。
WPAD的代理发现: 有些浏览器支持web代理自动发现协议,这个协议会自动检测处浏览器可以从那个配置服务器下载到一个自动配置文件。

手工配置

PAC文件

PAC文件是一个小型的JavaScript程序,可以在运行过程中计算代理设置,因此,是一种更加动态的代理配置解决方案。访问每个文档的时候,JavaScript函数都会选择恰当的代理服务器。

WPAD客户端代理配置

WPAD协议的算法会使用发现机制的逐级上升策略自动为浏览器查找合适的PAC文件,实现WPAD协议的客户端需要:

  1. 用WPAD找到PAC的URI
  2. 从指定的URI获取PAC文件
  3. 执行PAC文件来判定代理服务器
  4. 为请求使用代理服务器
    WPAD会使用一系列的资源来发现技术判定适当的PAC文件,并不是组织所有能够使用的发现的技术,所以WPAD使用了很多发现技术,WPAD会一个接着一个的对每个技术进行尝试,直到成功为止。
  • 动态主机配置协议
  • 服务定位协议
  • DNS知名主机名
  • DNS SRV记录
  • TXT记录中的DNS服务器URI

请求代理有关的问题

代理URI和服务器URI不同

客户端向服务器而不是代理发送请求的时候,HTTP请求报文的URI会有所不同
客户端向Web服务器发送请求的时候,请求行中只包含部分的URI

GET /index.html HTTP/1.0
User-Agent: SuperBrowser v1.3

当客户端向代理发送请求的时候,在请求行中包含完整的URI

GET http://www.marys-antiques.com/index.html HTTP/1.0
User-Agent: SuperBrowser v1.3

在原始的HTTP设计中,客户端会直接与单个服务器进行对话,不存在虚拟主机,也没有为大力制定什么规则,单个服务器都知道自己的主机名和端口,所以,为了避免发送冗余信息,客户端只发送部分URI即可,无需发送方案和主机
拦截代理是网络流量中的代理服务器,它会拦截从客户端发往服务器的请求,并提供一个缓存响应,或对其进行转发
在这里插入图片描述

代理既可以处理代理请求,也可以处理服务器请求
  • 如果提供的是完整的URI,代理就应该使用这个完整的URI
  • 如果提供的是部分URI,而且有Host首部,就应该使用Host首部来确定原始服务器的名字和端口号
  • 如果提供的是部分 URI,而且没有 Host 首部,就要用其他方法来确定原始服务器
    1. 如果代理是代表原始服务器的替代物,可以用真实服务器的地址和端口号来配置代理;
    2. 如果流量被拦截了,而且拦截者也可以提供原始的IP地址和端口,代理就可以使用拦截技术提供的 IP 地址和端口号
    3. 如果所有方法都失败了,代理没有足够的信息来确定原始服务器,就必须返回一条错误报文(通常是建议用户升级到支持 Host 首部的现代浏览器)
没有代理的时候URI的解析

在这里插入图片描述

有显示代理时URI的解析

在这里插入图片描述

有拦截代理时URI的解析

在这里插入图片描述

  1. 用户在浏览器的 URI 地址窗口中输入 oreilly
  2. 浏览器通过 DNS 查找主机 oreilly,但DNS服务器失败了,并回送响应说明主机未知
  3. 浏览器进行了自动扩展,将 oreilly 转换成 www.oreilly.com
  4. 客户端已经成功解析了主机名,并有了一张 IP 地址列表。有些IP地址可能已经停用了,所以,通常客户端会尝试着连接每个 IP 地址,直到成功为止。对拦截代理来说,第一次连接请求就会被代理服务器拦截成功,不会连接到原始服务器上去。客户端认为它在与 Web 服务器进行成功的对话,但那个 Web 服务器可能甚至都不处于活跃状态
  5. 当代理最终准备与真正的原始服务器进行交互的时候,代理可能会发现那个ip地址实际上是一个停用的服务器,为了提供和浏览器相同级别的容错机制,代理可以通过解析host首部的主机名,也可以通过对ip地址的反向dns查找来尝试其他ip地址,将浏览器配置为显示代理的时候,会依赖代理的容错机制,对于拦截和响应的代理实现来说,在dns解析到已停用服务器的时候,提供容错机制是很重要的

追踪报文

将web请求从客户端传送到服务器的路径上,经过两个或者多个代理是非常常见的,很多公司会使用缓存代理服务器来访问互联网,而且大型的isp都会使用代理缓存来实现提高性能并实现各种特性,想到比例的web请求都是通过代理转发的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(4)SDL渲染开发

SDL渲染开发 1. SDL简介2. 环境搭建2.1 windows2.2 Linux 3. SDL子系统3.1 eg1 创建窗口 4:SDL显示4.1 显示图片4.2 绘制长方形显示 5. SDL事件6. SDL多线程6.1 接口演示6.2 yuv显示6.3 pcm播放 1. SDL简介 SDL(Simple DirectMedia Layer)是一…

导出excle表

文章目录 导出excle表需求场景引入依赖具体代码 导出excle表 需求场景 假设我们有一个需求,现在数据库中有一些用户信息,我们想要把这些信息导出到excle表格中,然后存储到本地磁盘中。要求:excle表格的第一行需要有黄色背景&…

2024-06-11 Unity Shader 开发入门5 —— CG 语法

文章目录 1 CG 语法基础1.1 CG 结构1.2 数据类型1.2.1 基础数据类型1.2.2 复合数据类型1.2.3 特殊数据类型 1.3 操作符1.3.1 Swizzle 操作符1.3.2 向量/矩阵转换 1.4 运算符1.5 流程控制语句1.6 函数1.6.1 有返回值的函数1.6.2 有返回值的函数 2 顶点/片元着色器2.1 着色器结构…

ClickHouse数据库对比、适用场景与入门指南

本文全面对比了ClickHouse与其他数据库(如StarRocks、HBase、MySQL、Hive、Elasticsearch等)的性能、功能、适用场景,并提供了ClickHouse的教学入门指南,旨在帮助读者选择合适的数据库产品并快速掌握ClickHouse的使用。 文章目录 …

2千泰中英泰语词汇对照含MP3真人读音

越来越多的人到泰国旅游,今天这一份数据就是服务于此,包含了2000条泰语的日常生活词汇,并且每条记录都含有真人发音MP3对应。 有分100个章节,每个章节共有20条记录,非常适合一章节一章节的学习,具体章节有&…

mysql在linux下安装与配置

一、MySQL 安装 本教程的系统平台:CentOS release 6.6 (Final) 64位。 1、安装编译工具及库文件 yum -y install gcc gcc-c make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison…

《大数据分析》期末考试整理

一、单项选择题(1*9) 1.大数据发展历程:出现阶段、热门阶段和应用阶段 P2 2.大数据影响 P3 1)大数据对科学活动的影响 2)大数据对思维方式的影响 3)大数据对社会发展的影响 4)大数…

C语言适不适合新手学习?

C 语言,尽管从整体上看相对较为简单,但在实际编写 C 程序的过程中,会涉及到诸如指针等一些细节方面,这确实可能会给新手带来一定程度的困扰和挑战。不过,我们需要明确的是,这种挑战从某种意义上来说是具有积…

Web前端设计风格论文:探索、创新与挑战

Web前端设计风格论文:探索、创新与挑战 在数字化时代的浪潮中,Web前端设计风格正逐渐成为塑造用户体验的关键因素。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Web前端设计风格的发展趋势、创新实践以及所面临的挑战。 四个方面&#xff…

atcoder ABC 358-B题详解

atcoder ABC 358-B题详解 Problem Statement At the entrance of AtCoder Land, there is a single ticket booth where visitors line up to purchase tickets one by one. The purchasing process takes A seconds per person. Once the person at the front of the line f…

paddleocr实验过程

切割数据 Paddleocr/PPOCRLabel/gen_ocr_train_val_test.py;切割后的数据在train_data中,注意切割后的数据前缀默认是当前目录,因此建议切割数据在liunx中进行。建议在liunx中指定 python gen_ocr_train_val_test.py --datasetRootPathXX …

锁存器的工作原理及其在FPGA设计中的注意事项

锁存器(Latch)是数字电子中常用的一种基本元件,用于在特定的时间点或条件下“锁存”或保存输入的数据值。锁存器对脉冲电平敏感,它只在输入脉冲的高电平(或低电平)期间对输入信号敏感并改变状态。在数字电路…

React native 使用Animated 优化连续setState 性能问题

再部分场景下我们需要连续更新state刷新页面。一般情况刷新使用setstate没有问题,当需要连续刷新的情况会有明显的性能问题。 场景:自定义可拖动抽屉组件 新增需求在抽屉活动是更新主页面组件样式,此时需要动态传递抽屉高度修改主页组件属性…

vba学习系列(5)--指定区域指定字符串计数

系列文章目录 文章目录 系列文章目录前言一、需求背景二、vba自定义函数1.引入库 总结 前言 一、需求背景 想知道所有客诉项目里面什么项目最多,出现过多少次。 二、vba自定义函数 1.引入库 引用: CountCharInRange(区域,“字符串”) Function CountCh…

AWS无服务器 应用程序开发—第十二章 小结

在使用 AWS 无服务器架构进行开发时,需要注意的事项、易错点、性能优化建议和付费相关的信息: 前端开发(React.js) 注意点和易错点 CORS(跨域资源共享)问题:确保 API 网关设置了正确的 CORS 头。 环境配置:使用 .env 文件来管理环境变量。 构建优化:使用代码分割和…

人有时候不逼自己一把,永远不知道自己有多牛逼!

大家好,我是墨云,一位看起来不像搞技术的IT男。 之前写过一篇文章,从零开始,如何在3个月内吸引3500用户:我的私域运营秘诀,现如今,我们的私域社群成员数已逾五千人。👫 今天的主题&a…

MySQL -- 优化

1. 查询优化 使用索引 示例:有一个包含数百万用户的表,名为 users,常见的查询是通过 email 字段查找用户。 CREATE INDEX idx_email ON users(email);通过创建索引 idx_email,SELECT * FROM users WHERE email exampleexample…

【漏洞复现】红海云eHR PtFjk.mob 任意文件上传漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

【图解IO与Netty系列】Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制

Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制 Netty编解码器编码器解码器编解码器Netty提供的现成编解码器 TCP粘包拆包问题处理Netty心跳检测机制 Netty编解码器 网络传输是以字节流的形式传输的,而我们的应用程序一般不会直接对字节流进行处理&#x…

Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别

硬件设计中对硬件的描述可以具有不同的抽象级别,以Verilog为例: Behavior Level。描述的是硬件的行为,当我们在看到如下关键字时就是行为级别的代码:#,wait,while,force,release等&…