前言
它是一个中介
Web代理(proxy)服务器是网络的中间实体。 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。HTTP的代理服务器即是Web服务器又是Web客户端
Proxy代理软件
mac常用的proxy软件有Charles
proxy软件只能映射你浏览器的请求的host
P.s : 如果要改动你本机上所有http协议请求的host,请更改本机的Host文件,mac的本机host文件位置在/private/etc/
如何代理
你的pc地址x.x.x.x, 项目的地址跑在本机是 x.x.x.x:80/demo.html, 如果在本地开启了代理服务器, 那么代理服务器地址就是x.x.x.x:8888(如果你用Charles). 你的电脑上浏览器的所有http请求,都会先被转发到代理服务器x.x.x.x:8888,再由代理服务器x.x.x.x:8888转发到目标地址.
你开启proxy代理后,用浏览器访问www.baidu.com, 请求会被先转发到x.x.x.x:8888, 然后 x.x.x.x:8888会将这个请求转发到www.baidu.com,
映射域名
在开发过程中,我们常常需要把本地网站demo的域名改成某个线上的地址来满足某些开发需要(比如活动项目开发的时候,如果要调用微信的jssdk,网站必须是9game.cn的域名),比如在pc端,你想用goldpage.9game.cn:80/demo 这个域名来访问本地的项目localhost:5000/demo,这时候,就需要做一个域名映射,即在本地开启代理服务器,在代理服务器中进行配置goldpage.9game.cn:80 映射成 localhost:5000, 这样,你在浏览器中输入goldpage.9game.cn:80后,请求会先被转发到代理服务器x.x.x.x:8888,然后代理服务器会将这个请求转发到你本机的localhost:5000上
请求调试
移动端没有控制台,请求发出与否,哪些地方出错没有地方进行显示和调试.
现在场景如下:
你有一台手机(ip:y.y.y.y) 一台pc(ip:x.x.x.x) ,你在pc上开发完了一个页面y.y.y.y:80/demo.html,点击上面的按钮, 能向后台z.z.z.z:5000/restful这个地址发送一个ajax post请求. 现在你用手机调试这个页面,你点击了按钮,POST请求完全没反应,不知道是事件兼容性的问题还是网络的问题导致这个ajax请求没有发出去,这时候你需要做代理调试.
首先,在你pc x.x.x.x上开一个proxy代理,监听端口8888
然后,将你的手机的http代理设置为x.x.x.x:8888
这样,你手机发出的所有http请求,会被转发到你pc的代理服务器x.x.x.x:8888上来
经过这样的设置,请求就会从手机->pc(代理)->服务器,不仅不会对页面交互有任何影响,而且你可以通过查看代理服务器的日志来看所有经过代理服务器的ajax请求了! 用这种方式来抓包,效果一级棒
(在这个例子中,你访问x.x.x.x:80/demo.html,并且点击按钮向z.z.z.z:5000/restful 发送请求,这个过程实际上是发送了两个请求,一个向x.x.x.x:80请求demo.html的GET请求,一个向z.z.z.z:5000的restFul接口发送POST请求. 如果代理服务器不做任何设置,默认就是按原地址进行转发. 即 x.x.x.x:80转发到x.x.x.x:80, z.z.z.z.:5000转发到z.z.z.z:5000 (当然你也可以将x.x.x.x:80转发到baidu.com这是可以的,但这样你请求的就是baidu.com/demo.html了))
结语
Http Proxy还有其他很多有意思的技巧可以深入挖掘,有空再继续补充