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.mfbz.cn/a/714417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【猫狗分类】Pytorch VGG16 实现猫狗分类4-开始训练

背景 现在,我们已经完成了,数据集的清洗,标签的制作,也把VGG16的模型建立好了。那接下来,我们应该把数据,放到我们搭建的vgg16的模型里面,让模型针对这些猫和狗的图片,去进行训练&a…

MyBatis操作数据库(一)

什么是MyBatis? MyBatis是一个优秀的持久层框架,⽤于简化JDBC的开发。 MyBatis本是Apache的⼀个开源项⽬iBatis,2010年这个项目由apache迁移到了googlecode,并且改名为MyBatis。 简单来说MyBatis是更加简单完成数据和数据库交互的框架 什么…

内存泄漏 内存溢出

概念 内存泄漏:是程序没有正确的释放已分配的内存,造成系统内存的浪费。内存泄漏很难发现,因为他不会直接导致程序崩溃,而是会慢慢降低程序的性能。 内存溢出:系统中存在无法回收的内存或使用的内存过多,…

【C#】使用JavaScriptSerializer序列化对象

在C#开发语言编程中,通常使用系统内置的JavaScriptSerializer类来序列化对象,以便将其转换为JSON格式的文本存储与后台服务通信, 在这里将为大家详细介绍一下这个过程。 文章目录 反序列化序列化忽略属性 假设处理的数据中有一个对象类, 如下 public cl…

逆天改命 17岁中专女生横扫全球数学竞赛

“逆天改命!17岁中专女生横扫全球数学竞赛,清华北大高手纷纷落马!” 最近全网被这则消息震惊了。 来!随便挑几个题目,让大家体验一下阿里巴巴全球数学竞赛的难度? 数学是人工智能算法的基石。它为算法提供了逻辑框架和分析工具,使得人工智能能够处理复杂的数据和问…

电商秒杀系统

一,细节 二,需要注意的细节 1.库存超卖问题 使用mysql数据库的 悲观锁 机制。在事务中使用 for update 语句,此时数据库会加锁,其他想要当前读的线程都会被阻塞,在事务处理完成之后释放这一条数据。该方法的缺点在于…

基于springboot实现入校申报审批系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现入校申报审批系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装入校申报审批系统软…

英伟达开源最强通用模型Nemotron-4 340B

英伟达的通用大模型 Nemotron,开源了最新的 3400 亿参数版本。 本周五,英伟达宣布推出 Nemotron-4 340B。它包含一系列开放模型,开发人员可以使用这些模型生成合成数据,用于训练大语言模型(LLM)&#xff0…

排序——希尔排序

希尔排序实际上是插入排序的优化,所以要先介绍插入排序。 目录 插入排序 思想 演示 代码实现 总结 希尔排序 思想 演示 代码 总结 插入排序 思想 又称直接插入排序。它的基本思想是将一个值插入到一个有序序列中。直至将所有的值都插入完。 演示 假设数…

Web爬虫--fofa-资产信息搜集

免责声明:本文仅做技术交流与学习... 目录 fofa.py fofa搜索参数分析 fofa_api.py fofa.py import requests from bs4 import BeautifulSoup# 登录fofa之后,把自己的cookie弄过来. header{cookie: } # 参数为搜索的语法. urlhttps://fofa.info/result?qbase64dGl0bGU9IuS4…

云计算【第一阶段(14)】Linux的目录和结构

一、Liunx目录结构 1.1、linux目录结构 linux目录结构是树形目录结构 根目录(树根) 所有分区,目录,文件等的位置起点整个树形目录结构中,使用独立的一个"/",表示 1.2、常见的子目录 必须知道 目录路径目…

xinput1_3.dll怎么安装,关于xinput1_3.dll的多种修复方法分享

在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“找不到xinput1_3.dll”。那么,xinput13.dll到底是什么?为什么会出现找不到的情况?它对电脑有什么影响?本文将为您详细解析xinput1_3.dll的含义…

CPN Tools学习——从平面网构建分层 PN

1.先创建平面petri网 创建如下petri网: CPN ide创建petri网真的舒服很多,但是教程又是CPN Tools的,我的想法是看两个版本能不能互通,在前者创建,在后者运行学习。 新增定义: colset E unit with e; 但…

嘻嘻我是图床倒霉蛋

嘻嘻花了将近两个小时的时间配了一个小小的图床 手把手教你搭建阿里云图床(PicGoTypora阿里云OSS),新手小白一看就会-阿里云开发者社区 (aliyun.com) 大体上按照这篇配置就好 七牛云因为测试域名30天到期,用自己的得备案,所以比较麻烦,建议直接上阿里云 我买了一…

JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)

前言 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。连接池技术尽可能多地重用了消耗内存的资源,大大节省了内存。通过使用连接池,将大大提高程序运行效率。常用的…

数字孪生技术如何赋能智慧工厂

数字孪生技术为什么能在智慧工厂中发挥作用?随着工业4.0的推进和智能制造的普及,数字孪生技术成为智慧工厂的重要推动力。数字孪生是指在虚拟空间中创建一个与现实物理实体相对应的数字模型,通过实时数据交互和分析,实现对物理实体…

DAY24 回溯算法part01 77. 组合 216.组合总和III 17.电话号码的字母组合

理论基础 #什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。 回溯是递…

Excel自定义排序和求和

概览 excel作为办公的常备工具,好记性不如烂笔头,在此梳理记录下,此篇文章主要是记录excel的自定义排序和求和 一. 自定义排序 举个例子 1. 填充自定义排序选项 实现步骤: 选定目标排序值;文件->选项->自定…

从0开始理解DevOps

目录 一、DevOps背景 二、DevOps介绍 DevOps 组成 三、Jenkins Jenkins 工作流程 四、云原生与DevOps 相信你一定听过 DevOps 这个词,那它到底是什么呢?为什么越来越多的互联网企业都在追随使用它?它与云原生有什么关系?本文将…

checkbox表单校验 至少选中一个Checkbox , 否则会报错

项目背景 : react ant 需求 : 需实现至少选中一个Checkbox , 否则会报错 需求如下 : 注意 : Input, Select, DatePicker可以直接处理Form.Item的验证规则 , 但Checkbox不行 , 需自定义验证规则 实现 : // 自定义的checkbox校验规则--星期const validateAtLeastOneCheckbo…