代理

最近要求我连接后端接口,我还只是个小实习,啥都不会,复制粘贴一波后,看着代码,很是迷惑,生产环境、测试环境啥的域名呢,最少应该也有两个域名把,可从头到尾我只看到了一个域名。what???求问了前辈,说用了代理,代理我懂,那不是解决跨域的吗,咋跟这个问题有关吗???接着前辈去忙别的事 ,留我匆忙百度中。


先解释一下跨域是什么东西?
跨域是由浏览器同源策略引起的,所有的浏览器都使用这个策略,这是一种约定。同源是指域名、端口、协议相同,也就是说,页面请求的接口地址,必须与页面url地址处于同域上(域名、端口、协议相同)。这是为了防止某域名下的接口被其他域名下的网页非法调用,是浏览器对JavaScript施加的安全限制。
什么是域名、端口、协议?
这与是不是同台电脑无关。
打开百度,网址:https://www.baidu.com/
http:// => 表示协议
baidu.com => 表示域名(这是若是www.baidu.com表示的是二级域名,查到的资料上进行域名划分的时候,都不会加上www.)
还有端口号,默认的端口号不显示,网站上一般都不会显示端口号了,如果进行过本地开发你会发现网址是这样的http://localhost:8080/#/
8080 => 表示的就是端口号

通俗来讲,跨域就好似你去拿别人的东西,浏览器就好似看管者,一发现这种情况就会阻止你,然后你什么都拿不到,还背了“跨域”的罪名。


讲完跨域,就该进入正题了,为什么部署生产环境、测试环境的时候要用代理,那是因为我们开发的时候,肯定是在本地开发,有些静态资源也放在本地电脑上,访问这些资源,通过IP方式(127.0.0.1)或者localhost来访问,但项目上线了呢,有测试环境、生产环境,这样一算就有三个域名,调试的时候该怎么办,用哪个域名。有些人的做法,是全局声明三个域名,根据不同的环境,请求不同的域名,这样一来,就需要后端协作,需要后端每次更新都要在三个域名上进行更新,操作繁琐。有些人就用了采用代理的方法。

代理有正向代理和反向代理。

关于代理,可以看看这篇文章跨域问题,以下是一些总结。

正向代理是指一个位于客户端和目标服务器(target server)之间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标(目标服务器),然后代理向目标服务器转交请求并将获得的内容返回给客户端。
正向代理数据请求过程:
浏览器 => 代理服务器 => 目标服务器 这是请求数据过程;
目标服务器 => 代理服务器 => 浏览器 这是数据返回过程。
就像大陆用户访问不了google.com网站,但是如果有代理(代理可能是香港或是哪里的某个服务器,这个服务器可以访问google.com),大陆用户就可以先访问代理服务器,代理将请求发给google.com,代理服务器将得到的数据再返回给大陆用户。

反向代理是指代理服务器来接受internet上的连接请求,然后转给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。
反向代理数据请求过程:
浏览器 =>(代理服务器 => 目标服务器) 这是请求数据过程;
(目标服务器 => 代理服务器) => 浏览器 这是数据返回过程。

从整个过程来看,正向、反向代理的区别在于代理服务器和目标服务器是否为一体。

从使用方来看,正向代理是浏览器端进行配置的,与服务器端无关,甚至可以对服务端隐藏;反向代理是服务器端配置的,对浏览器端是透明的。(关于本文问题,这个才是重点)


综上,用了代理后,全部的请求都会经过那个代理,所以不需要考虑域名啥的,后端也只需要一份代码就可以了。
emmm 以上内容有很多自己的理解,若是有错误,欢迎指出~

相关推荐