【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索
背景
跨域是由浏览器的同源策略引起的,是指页面请求的url地址,必须与浏览器上的url地址处于同域上(即竽暌跪名,端口,协定雷同)。
这是为了防止某域名下的接口被其他域名下的网页不法调用,是浏览器对JavaScript施加的安然限制。
这个办法的出发点是好的,然则法度榜样页面开辟的过程中,却经常给前端开辟者带来麻烦。
解决跨域问题常用的解决筹划有这两个:
- JSONP:应用script标签可跨域的特点,在跨域脚本中可以直接回调当前脚本的函数。
- CORS:办事器设置HTTP响应头中Access-Control-Allow-Origin的值,解除跨域限制。
然则这两个跨域筹划都存在一个致命的缺点,严重依附后端的协助。
开辟中碰到的每一个接口都须要提前找后端进行特别的处理。并且即使后端愿意协助,某些接口不是随便就能开放的(譬如已经在上线正式情况的接口)。
无论若何,依附后端协助的跨域解决筹划都邑在必定程度上限制前端开辟的进度。
那么竽暌剐没有前端自力就能实现的跨域筹划呢?有的,我们可以应用「代劳」或「反向代劳」技巧来实现开辟中的跨域问题。
代劳
代劳,也称正向代劳,意思是一个位于客户端和目标办事器(target server)之间的办事器,为了大年夜目标办事器取得内容,客户端向代理发送一个请求并指定目标(目标办事器),然后代劳向目标办事器转交请求并将获得的内容返回给客户端。
应用:
因为前端开辟过程中,静态资本是放在本地电脑上的,拜访这些资本平日经由过程IP方法(127.0.0.1)或者localhosts来拜访,与线上办事器地点域名不符,不克不及顺利调用办事的端口。
通俗地说:
- 「客户端」可以看作一个黑社会大年夜佬,「目标办事器」可以看作一家饭铺,「代劳办事器」可以看作小弟。
- 「老大年夜」想吃饭铺的敬佩骨饭,就让「小弟」去买,「小弟」跑到「饭铺」要个敬佩骨饭。
- 「饭铺」敬佩骨饭做好,送到「小弟」手上,「小弟」最后再把敬佩骨饭拿给「大年夜佬」。
说白了,小弟就是个劈叉的,代劳大年夜佬的需求。
对正向代劳办事器进行设备,当获取非接口数据时,让代劳办事器指向开辟者本机的资本。当拜访接口时,拜访后端接口数据。
数据流程:
- 数据请求过程:浏览器-》代劳办事器-》目标办事器
- 数据返拒过程:目标办事器-》代劳办事器-》浏览器
最经典的应用就是科学上彀:我是一个国内用户,我拜访不了google,然则我能拜访一个喷鼻港的某个代劳办事器。
这个喷鼻港的代劳办事器可以拜访google,于是我先把请求发送到那个代劳办事器,告诉他我须要拜访google,代劳办事器去取内容,最后返回给我。
就比如,大年夜佬被抓起来坐牢了,不克不及出去买敬佩骨,只好请渺小弟去买回来。
百度百科的解释如下:
代劳与反向代劳
反向代劳(Reverse Proxy)方法是指以代劳办事器来接收internet上的连接请求,然后将请求转发给内部收集上的办事器,并将大年夜办事器上获得的结不雅返回给internet上请求连接的客户端,此时代劳办事器对外就表示为一个反向代劳办事器。
数据流程:
- 数据请求过程:浏览器-》【反向代劳办事器-》处理数据的办事器】
- 数据返拒过程:【处理数据的办事器-》反向代劳办事器】-》浏览器
通俗地说:
「浏览器」可以看作门客,「【反向代劳办事器-》处理数据的办事器】」章一?整体可以看作饭铺,个中「反向代劳办事」相当于点单的办事员。「处理数据的办事器」可以懂得为是厨师。
- 「门客」素来到「饭铺」向「办事员」点菜,但办事员并不会真正去做菜,他是下达敕令让「厨师」去做菜。
- 「厨师」把菜做好了给「办事员」,「办事员」再把菜端给「门客」。
在外部看来,「代劳办事器」和「处理数据的办事器」是一个整体。就比如,门客只会去饭铺吃饭,而不是去找厨师吃饭(即对于浏览器来说,达到反向代劳办事器已经完成义务了,后面的操作则由反向代劳办事器负责)。
具体饭铺怎么操作,对门客是透明的。有可能某个办事员即当办事器也当厨师(即反向代劳办事器和处理数据的办事器是同一台PC机)。
弥补一下,没有反向代劳,就比如没有了办事员,门客直接向厨师要吃的。譬如,你饿了,直接叫妈妈做饭是一样的(少了下订单的步调)
比较
大年夜用处上来讲:
- 正向代劳的典范用处是为在防火墙内的局域网客户端供给拜访Internet的门路。正向代劳还可以应用缓冲特点削减收集应用率。
- 反向代劳的典范用处是为后端的多台办事器供给负载均衡,或为后栋道稞的办事器供给缓冲办事。
大年夜安然性来讲:
- 正向代劳许可客户端经由过程它拜访随便率性网疆场且隐蔽客户端自身,是以你必须采取安然办法以确保仅为经由授权的客户端供给办事。
- 反向代劳对外都是透明的,拜访者并不知道本身拜访的是一个代劳。
大年夜应用方来看:
- 正向代劳是浏览器端进行设备的,与办事器端无关,甚至可以对办事端隐蔽。
- 反向代劳是办事器端设备的,对浏览器端是透明的。
应用代劳实现跨域
实现道理
相当于大年夜佬让小弟把敬佩骨饭琅绫擎的饭和敬佩骨分开买,饭本身家煮,敬佩骨才去饭铺买。
反向代劳须要用到nginx,其具体介绍请看 http://www.nginx.cn/doc/http://www.nginx.cn/doc/
法度榜样运行过程