• HTTP 笔记 代理


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

    HTTP的代理服务器既是Web服务器又是web客户端。

    单个客户端专用的代理被称为私有代理,众多客户端共享的代理被称为公共代理。

    公共代理:大多数代理都是公共的共享代理。集中式代理 的费效比更高,更容易管理。某些代理应用,比如调整缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。

    私有代理:不常见。有些浏览器辅助产品,以及一些ISP服务,会在用户的PC上直接运行一些小型的代理,以便扩展浏览器特性,提高性能,或为免费ISP服务主机广告。

    代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。

     代理服务器可以改善安全性,提高性能,节省费用。

    代理服务器可以看到并接触到所有渡过的HTTP流量,所以代理可以监视流量并对其进行修改。

    1 儿童过滤器 

    2 文档访问控制

    3 安全防火墙 ,代理服务器会在网络中的单一安全节点上限制哪些应用层协议折数据可以流入或流出一个组织。还可以提供用来消除病毒的web和email代理使用的那种挂钩程序,以便对流量进行详细 的检查。

    4 web缓存:代理缓存维护了常用文档的本地副本,并将它们按需提供,以减少缓慢且昂贵的因特网通信。

    5 反向代理:接收发给web服务器的真实请求,但与web服务器不同的是,它们可以发起与其他服务器的通信,以便近需定位所请求的内容。

    可以用这些反向代理 来提高访问 慢速 web服务器上公共内容时的性能。在这种配置中,通常将这些反向代理称为服务器加速器,还可 以将替代物与内容路由功能 配合使用,以创建按需复制内容的分布式网络。?

    6 内容路由器:代理服务器可以作为 内容路由器 使用,根据因特网流量状况以及内容类型将请求导向特定的web服务器。

    内容路由器也可以用来实现各种服务级的请求。比如,如果用户或内容提供者付费标示提供更高的性能,内容路由器可以将请求转发到附近的复制缓存,或者如果用户申请了过滤服务,还可以通过过滤代理来转发hTTP请求。可以用自适应内容路由代理来构建很多有趣的服务。

    7 转码器:代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码

    转码代理可以在传输GIF图片时,将其转换成JPEG图片,以减小尺寸。也可以对图片进行压缩,或降低颜色的色彩饱和度以便在电视上观看。同样,可以对文本文件进行压缩,并为能够使用因特网的呼机和智能手机生成小型的文本摘要web页面。代理甚至可以在传输文档的过程中将其转换成外语。

     8 匿名者

    匿名者代理会主动从http报文中删除身份特性 比如:客户端IP地址、from首部、refere首部、cookie、URI的会话ID ,从而提供高度的么密性和匿名性。

    匿名代理会对用户报文进行下列修改以增加私密性

    1 从User-Agent 首部删除用户的计算机与OS类型。

    2 删除From首部以保护用户的e-mail地址

    3 删除Referer首部来掩盖用户访问过的其他站点。

    4 删除Cookie首部以剔除概要信息和身份的数据

    代理会去往何处

    代理服务器的部署:

    可以根据其目标用途,将代理放在任意位置。

    1 出口代理 :可以将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量。可以在公司网络中使用出口代理,提供针对公司外部恶意黑客的防火墙保护,或降低带宽费用,提高因特网流量的性能。客户端-本地网络-代理-因特网-服务器

    2 访问(入口)代理:代理常被放在ISP访问点上,用以处理来自客户的聚合请求。ISP使用缓存代理来存储常用文档的副本,以提高用户尤其是高速连接用户 的下载速度,降低因特网带宽耗费。

    3 反向代理:代理通常会被部署在网络边缘,在web服务器之前,作为替代物也常被称为反向代理 使用,在那里它们可以处理所有传送给web服务器的请求,并只在必要时向web服务器请求资源。替代物可以提高web服务器的安全特性,或者将快速的web服务器缓存放在较慢的服务器之前,以提高性能。反向代理通常会直接冒用web服务器的名字和IP地址,这样所有的请求就会被发送给代理而不是服务器了。客户端-因特网-代理-本地网络-服务器

    4 网络交换代理:可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监视。客户端-网络1-路由器-代理-路由器-网络2-服务器

    代理的层次结构:可以通过代理层次结构 将代理级联起来。在代理的层次结构中,会将报文从一个代理传给另一个代理,直到最终抵达原始服务器为止,然后通过代理传回给客户端。

    proxy层次结构中的代理服务器被赋予父和子的关系 。下一个入口代理靠近服务器被称为父代理,下一个出口代理靠近客户端被称为子代理。

    1 访问代理会根据不同的情况将报文转发给父代理或原始服务器

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

    如果请求的是特定类型的图片,访问代理会将请求转发给一个特定的压缩代理,这个代理会去获取图片,然后对其进行压缩,这样通过到客户端的慢速Moderm下载时,速度会更快一些。

    2 负载均衡:子代理可能会根据当前父代理上的工作负载级别来决定如何选择一个父代理,以均衡负载。

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

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

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

    在不同的产品中,动态父路由逻辑的实现方式各有不同,包括使用配置文件、脚本语言和动态可执行插件等。

    代理是始何获取流量的

    客户端通常会直接与web服务器进行通信,有四种常见方式可以使客户端流量流向代理。

    1 修改客户端:很多web客户端,包括网景和微软的浏览器,都支持手工和自动的代理配置。如果将客户端配置为使用代理服务器,客户端就会将HTTP请求有意地直接发送给代理,而不是原始服务器。

    2 修改网络:网络基础设施可以通过若干种技术手段,在客户端不知道,或没有参与的情况下,拦截网络流量并将其导入代理。这种拦截通常都依赖于监视http流量的交负设备及路由设备,在客户端毫不知情的情况下,对其进行拦截,并将流量导入一个代理。这种代理被称为拦截代理。

     3 修改DNS的命名空间:放在web服务器之前的代理服务器 (替代物),会直接假扮web服务器的名字和IP地址,这样,所有的请求就会发送给这些替代物,而不是服务器了。要实现这一点,可以手工编辑DNS名称列表,或者用特殊的动态DNS服务器为确定适当的或服务器。有时在安装过程中,真实服务器的IP地址和名称被修改了,替代物得到的会是之前的地址和名称。

    4 修改web服务器:也可以将某些web服务器配置为向客户端发送一条Http重定向命令 305,将客户端请求重定向到一个代理上去。收到重定向命令后,客户端会与代理进行通信。

    客户端的代理设置:

    所有现代的web浏览器都允许用户对代理的使用进行配置。实际上,很多浏览器都提供了多种配置代理的方式。其中包括以下几种:

    1 手工配置:显式地设置要使用的代理

    2 预先配置浏览器:浏览器厂商或发行商会在将浏览器发送给其客户之前预先对浏览器 或民有其他web客户端 的代理设置进行手工配置。

    3 代理的自动配置:提供一个URI,指向一个用javascript语言编写的代理自动配置文件,客户端会取回这个javascript文件,并运行它以决定是否应该使用一个代理,如果是的话,应该使用哪个代理服务器。

    4 WPAD的代理发现:有些浏览器支持web代理自动动发现协议,这个协议会自动检测出浏览器可以从哪个 配置服务器 下载到一个自动配置文件。

    客户端的代理配置:手工配置。IE-工具-选项-设置-使用代理服务器 -高级

    为代理指定主机和端口。有些ISP会向客户发送预先配置好的浏览器,或定制好的操作系统,使其将web流量重定向到代理服务器上。

    客户端代理配置:PAC文件

    手工代理配置只能为所有内容指定唯一的一个代理服务器,而且不支持故障转移。

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

    要使用PAC文件,就要用javascriptPAC文件的URI来配置浏览器,配置方式与手工配置类似,但要在自动配置 框中提供一个URI .浏览器会从这个URI 上获取PAC文件,并用javascript逻辑为每次访问计算恰当的代理服务器。PAC 文件的后缀通常是.pac,MIME 类型通常是application/x-ns-proxy-autoconfig.

    每个PAC文件都必须定义一个名为FindProxyForURL(url,host)的函数,用来计算访问URI时使用的适当的代理服务器。函数的返回值可以下列任意值。

    1 DIRECT 不经过任何代理,直接进行连接

    2 Proxy host:post 应该使用指定的代理

    3 SOCKS host:post 应该使用指定的SOCKS服务器

    客户端代理配置:WPAD

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

    1 用WPAD找到PAC的URI;

    2 从指定的URI获取PAC文件;

    3 执行PAC文件的来判定代理服务器

    4 为请求使用代理服务器

    WPAD会使用一系列的资源发现技术来判定适当的pac文件。并不是所有组织都能够使用所有的发现技术,所以WPAD使用了很多种发现技术。WPAD会一个接一个地对每种技术进行尝试,直到成功为止。

    当前的WPAD协议规范按顺序定义了下列技术:

    动态主机配置协议

    服务定位协议

    DNS知名主机名

    DNS SRV 记录;

    TXT记录中的DNS服务URI

    没有设置客户端使用代理时,会发送部分URI

    设置客户端使用代理时,它会发送完整URI

    显式的代理要求在请求报文中使用完整URI来解决这个问题

    虚拟主机web服务器要求使用Host首部来承载主机和端口信息。

    使用完整和部分URI的规则如下:

    1 如果提供的是p完整URI,代理就应该使用这个完整URI

    2 如果提供的是部分URI,而且有Host首部,就应该用host首部来确定原始服务器的名字和端口号。

    3 如果提供的是部分URI,而且没有Host首部,就要用其他方法来确定原始服务器

      如果代理是代表原始服务器的替代物,可以用真实服务器的地址和端口号来配置代理

      如果流量被拦截了,而且拦截者也可以提供原始的IP地址和端口,代理就可以使用拦截技术提供的IP地址和端口号

      如果所有方法都失败了,代理没有足够的信息为确定原始服务器,就必须返回一条错误报文。

     via 首部字段列出了与报文途经每个中间节点有关的信息。报文每经过一个节点,都必须将这个中间节点添加到via列表的末尾。

    via首部字段用于记录报文的转发,诊断报文循环,标识请求/响应链上所有发送者的协议能力。

    通过http/1.1的TRACE方法,用户可以跟踪经代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文 进行修改的。

    当TRACE请求到达目的服务器时,整条请求报文都会被封装在一条http响应的主体中回送给发送端。当TRACE响应到达时,客户端可以检查服务器收到的确切报文,以及它所经过的代理列表 在via首部。TRACE响应的Content-Type 为 message/http ,状态为200 OK

    可以使用Max-Forwards 最大转发次数 首部来限制TRACE和OPTIONS请求所经过 代理跳数

    Max-Forwards请求首部字段包含了一个整数,用来说明这条请求报文还可以被转发的次数

    如果Max-Forwards的值为零,那么即使接收者不是原始服务器,它也必须将TRACE报文回送给客户端

    代理认证

    代理可以作为访问控制设备使用。http定义了一种名为代理认证的机制,这种机制可以阻止对内容的请求,直到用户向代理提供了有效的访问权限证书为止。

    对受限内容的请求到达一台代理服务时,代理服务器可以返回一个要求使用访问证书的407状态码,以及一个用于描述怎样提供这些证书的首部字段

    客户端收到407响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所需要的证书。

    只要获得了证书,客户端就会重新发送请求,在proxy-authorization首部字段中提供所要求的证书。

    如果证书有效,代理就会将原始请求沿着传输链路向下传送,否则,就发送另一条407应答。

    若传输链路中有多个代理,且每个代理都要进行认证时,代理认证通常无法很好地工作。

    代理的互操作性

    处理代理不支持的首部和方法 :代理必须对不认识的首部字段进行转发,而且必须维持同名首部字段的相对顺序。

    OPTIONS:发现对可选特性的支持:通过HTTP OPTIONS方法,客户端或代理可以发现web服务器或者其上某个特定资源所支持的功能

    OPTIONS* HTTP/1.1

    如果OPTIONS请求的URI是个星号(*),请求的就是整个服务器所支持 功能。

    如果URI是个实际资源地址,OPTIONS请求就是在查询那个特定资源的可用特性。、

    如果成功,OPTIONS方法就会返回一个包含了各种首部字段的200OK响应,这些字段描述了服务器所支持的,或资源可用的各种可选特性。HTTP/1.1在响应中唯一指定 首部字段是allow首部,这个首部用于描述服务器所支持的各种方法 或者 服务器上的特定资源。

    allow首部:allow实体首部字段列出了请求URI标识的资源所支持的方法列表 ,如果请求URI 为*的话,列出的就是整个服务器所支持的方法列表

    HTTP/1.1 200 OK

    Allow:GET,PUT,POST,HEAD,TRACE,OPTIONS

  • 相关阅读:
    第13章 子查询和集合运算
    第12章 SQL联接
    第11章 分组函数 ​
    第10章 单行函数 ​
    第15章 RMAN备份 ​
    第1章
    OCP/OCA Oracle 学习001
    Linq之Sum用法新体会
    java中的异常
    android SQLite使用SQLiteOpenHelper类对数据库进行操作
  • 原文地址:https://www.cnblogs.com/caojuansh/p/13044676.html
Copyright © 2020-2023  润新知