简单的说HTTP代理就是处于HTTP客户端和服务器端之间,中转消息的中间人。

一种代理是代客户端去请求服务器,叫做Forward Proxy正向代理;另一种是代理真正的服务器来接收用户请求,叫做Reverse Proxy反向代理。下边分别介绍。

  • 先说正向代理,也是最常见的。

为什么需要?客户端不能直接建立连接到目的服务器。比如大公司的内网(或者大T朝内网),你不能直接PING到外网服务器,根本没有路由器帮你传送IP包到外网(或者某部分外网)。这时候又需要允许内网访问网页,比如百度一下什么的。这时候HTTP代理就是不二选择了。HTTP服务器这时候既要接受内网的请求,又要能连接外网。所以这时候HTTP服务器必须位于所谓的DMZ非军事区或者内外两个网卡非别连接内外网。

正向代理要求客户端必须知道代理服务器的地址和端口,并且显式配置。

浏览器或者其它客户端在使用代理的情况下行为与不使用代理有所不同:

1. 所有网页不再连接目标主机,改为建立TCP连接到代理。

2.发送请求时,必须发送完整URL,比如GET http://www.luoxq.com/index.html,而不能再简单发送GET /index.html。因为代理服务器要知道客户端究竟要访问哪个网站。而不用代理的情况下,客户端已经直接连接到www.luoxq.com了,没必要发主机名。(实际上也有必要,但是历史原因一般通过Host头部发送了)。

3.对与HTTPS连接要特别处理。因为HTTPS就是要保证安全,如果代理能从中看到客户端和服务器的通信就不安全了。比如你不希望使用支付宝的时候代理服务器还看到你发送的信息吧:)。那怎么做到呢?代理协议有个特殊的方法,叫CONNECT。这时候客户端发送一个 CONNECT www.luoxq.com:443请求。代理服务器呢,只是简单的帮客户端连接服务器的443端口,并且以二进制的方式(不去解读,也无法解读内容)中转两方的TCP数据流。客户端和服务器会利用这个隧道连接传送数字证书和公钥。利用PKI公钥机制,代理服务器完全无法解读他们的通信。这样就安全了。说道这里,我们可以想象如果客户端并不是请求页面,代理服务器也无法获知客户端与服务器究竟是不是在做HTTP通信。也就是说通过这个隧道实际上可以建立到外网的任意TCP连接。呵呵。

我们可以想想一个代理服务器 的内部逻辑不会太复杂,对头部的一些解读,然后就是中转数据流。当然一个真正的完整的代理服务器有很多功能,比如缓存等。

  • 下面说说反向代理。也许只有系统管理员才熟悉这个。

反向代理对客户端不可见。也就是说你访问www.luoxq.com很可能你是在访问一个反向代理,但是你并不知道。其实反向代理也可以说是一个门面服务器。反向代理主要起到以下作用:

1. 集群和负载均衡。一个大网站可以由多台服务器提供服务。这些服务器可以位于不可见的内网。反向代理服务器将多个用户请求分发给多台服务器处理。这里当然有比较复杂的配置,比如分发算法,粘住会话,探测服务器状态等。

2.提供业务服务器业务逻辑之外的功能。比如数字证书,单点登录,日志,更好的静态文件性能等。

Apache HTTPD是最常用的代理服务器之一。它既可以配置为正向代理,还可以配置为反向代理,并且它有丰富的插件支持各种功能,或者只是用它作为应用服务器 – 使用PHP, CGI等。官方文档有很好的说明。也可以同时配置成正向和反向代理,并行不悖,并且可以同时给正向代理配置安全属性 – 如果你需要这个可以给我留言。

HTTP代理浅说的更多相关文章

  1. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  2. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  3. Visual Studio Code 代理设置

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...

  4. DynamicObject - 代理对象的种类

    开箱即用,DynamicProxy提供了多种代理对象,主要分成两个大类: 基于继承(Inheritance-based) 基于继承的代理是通过继承一个代理类来实现,代理拦截对类的虚(virtual)成 ...

  5. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...

  6. 实现代理设置proxy

    用户在哪些情况下是需要设置网络代理呢? 1. 内网上不了外网,需要连接能上外网的内网电脑做代理,就能上外网:多个电脑共享上外网,就要用代理: 2.有些网页被封,通过国外的代理就能看到这被封的网站:3. ...

  7. 23种设计模式--代理模式-Proxy

    一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到 ...

  8. 使用Java原生代理实现AOP

    ### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...

  9. Javascript 代理模式模拟一个文件同步功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. SQL 课程

    今天,我主要学习了数据库的基本查询,模糊查询.排序查询.聚合函数.计数和分组,以及数学函数.字符串函数.时间日期函数. create database lianxi0720gouse lianxi07 ...

  2. URL匹配与req参数解析

    通配URL*(可代表任何字符串) 例如: app.get('/test/*', function(req, res){ res.send(req.query.aa); }) '/test/*通配tes ...

  3. 借助nginx搭建反向代理服务器小例

    1 反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器接收internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接 ...

  4. 十五、oracle 约束

    一.维护数据的完整性数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并 ...

  5. RLE行程长度编码压缩算法

    在看emWIN的时候看到一个图片压缩的算法可以有效的对二值图(简单的2中颜色或者更多)进行压缩,压缩的效果可以节省空间而且不丢失信息! 特点 一种压缩过的位图文件格式,RLE压缩方案是一种极其成熟的压 ...

  6. mysql出现Can't connect to MySQL server on 'localhost' (10061)的解决方法

    网上搜索的一: 今天把mysql数据库拷贝到另外一台机上,结果连不上,报“Can't connect to MySQL server on 'localhost' (10061)“错误 到网上sear ...

  7. 利用朴素贝叶斯算法进行分类-Java代码实现

    http://www.crocro.cn/post/286.html 利用朴素贝叶斯算法进行分类-Java代码实现  鳄鱼  3个月前 (12-14)  分类:机器学习  阅读(44)  评论(0) ...

  8. hdu_5044_Tree(树链剖分)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5044 题意:给一棵树,在点和边上操作 题解:树链剖分,剖完后用树状数组维护即可,因为只有加减操作,连树 ...

  9. redis第一篇--综述

    1 redis里边有数据库的概念.可分为1-255这些表.在存储或者查找的时候要指明. redis_sentinel 集群里边封装成了namespace这样的概念.与db是不一样的.

  10. swf version 与flash player 对应关系

    2013-04-16更新:更新Flash Player 11.7/AIR 3.7正式版. 详细链接FlashPlayer 11.7详情 2013-03-10更新:更新Flash Player 11.6 ...