代理

本章主要介绍了http代理方面的概念,包括代理的配置、分类、作用等!

Web的中间实体

  • Web上的代理服务器是代表客户端对事务请求处理的中间人!分为私有代理(只代理一个客户端)和公共代理(代理多个客户端)。
  • 代理和网关的对比:代理的两端使用相同的协议,而网关的两端使用不同的协议,网关负责协议转换!

为什么使用代理

主要使用代理作以下功能使用:

  1. 儿童过滤器:如服务器响应的成人内容进行过滤
  2. 文档访问控制:验证客户端访问某个的文件需要的证书
  3. 安全防火墙:提供一个防火墙保护客户端或服务器
  4. Web缓存(缓存资源的副本):对客户端响应资源的副本,节省带宽、减少网络拥堵
  5. 反向代理(原始服务的替代物,能访问其他服务器,作服务器加速器使用):反向代理伪装成原始服务器,不过与服务器不同的是反向代理还可以向其他服务器发送请求,以便实现按需定位所请求的内容!
  6. 内容路由器:比如网络中实现为了一些付费用户提供更好、更快的网络速度,让请求发往缓存服务器,而没有付费的用户请求则发往更远或原始服务器!
  7. 转码器(比如改变图片格式,以便更轻巧利于传输)
  8. 匿名者:保护客户端隐私

代理去往何处

按部署代理的位置代理可以分为一下几种:

  1. 出口代理:部署在本地网络端,用于保护本地网络或者限制公司带宽
  2. 访问(入口)代理:用于实现提供缓存响应
  3. 反向代理:部署在服务器端本地网络上,用于实现更精确的请求和提供性能
  4. 网络交换代理:部署在网络上,用于检测流浪等

代理层次结构描述的代理的部署层级结构,比如一级代理,二级代理等,这是一种静态层级结构,有父代理和子代理的概念,离原始服务器进的的代理是离服务器远的代理的父代理!但是代理层级不应该静态的,而应该可以是动态的,以保证代理可以根据实际网络负载情况而下发报文到不同的代理!从而产生的动态层级代理概念有负载均衡地理位置附近的路由 等!

http请求报文是怎么进入代理的,描述的怎么把http请求报文流量导入代理!主要有一下几种方式:

  1. 修改客户端:比如现在的客户端都支持收手动和自动配置代理!
  2. 修改网络:网络通过一些技术在客户端不知情的情况揽入流量进入代理!
  3. 修改dns命名空间:把主机名映射为代理的ip地址,比如修改系统的dns映射文件,让代理伪装成原始服务器,从而把Web请求导入代理!
  4. 修改服务器:让服务器返回一个重定向有关的代码,把http请求报文导入到代理!

客户端代理设置

主要介绍客户端配置代理的几种常见方式,如下:

  • 手工配置 : 显示地设置要使用的代理
  • 预先配置浏览器 : 浏览器厂商或发行商会在将浏览器发送给其客户之前预先对浏览器(或所有其他的Web客户端)的代理设置进行手工配置
  • 代理的自动配置(Proxy Auto-Configuration,PAC):一个代理配置的js文件,客户端在请求之前会取回这个js文件,从而判断如何决定使用代理
  • WPAD的代理发现 : 略

与代理有关的一些棘手问题

  1. 发送给服务其的url可以是相对路径,而发送给代理的是包含方法、主机名等完整路径!
  2. 与虚拟主机目录同样存在的问题,可以通过在请求报文的host首部发送确定的主机信息!
  3. 拦截代理会受到部分url!
  4. 代理既可以处理代理请求,也可以处理服务器请求!
  5. 转发过程中对URI的修改
  6. URI的客户端自动扩展和主机名解析
  7. 没有代理URI的解析
  8. 有显示代理的URI的解析
  9. 有拦截代理的URI的解析

追踪报文

  • 现在代理请求逐步流行的情况下,需要一种机制来追踪我们的报文经过了那些节点。此时报文中via字段就是一个描述报文在代理中逐级传输的过程中所经过代理的方式!如下:
        GET /index.html HTTP/1.0
        Accept: text/html
        Host: www.joes-hardware.com
        Via: 1.1 proxy-62.irenes-isp.net,1.0 cache.joes-hardware.com
    
  • via字符告诉我们报文流经了两个代理。这个字符串说明第一个代理名为proxy-62.irenes-isp.net,它实现了HTTP/1.1协议,第二个代理被称为cache.joes-hardware.com,实现了HTTP/1.0。
  • Server响应首部字段对原始服务器使用的软件进行了描述,如下有几个例子:
    • Server: Apache/1.3.14 (Unix) PHP/4.0.4
    • Server: Netscape-Knterprise/4.1
    • Server: Microsoft-IIS/5.0

注:如果响应报文是通过代理转发的,一定要确保代理没有修改Server首部。Server首部是用于原始服务器的。代理应该添加的是Via首部。

下一节:本章主要从缓存的架构、优势、节省带宽流量、提升响应及处理步骤等方面阐述了web缓存!