反向代理与跨域
Published by Shangyu Liu,

既有反向代理,必有正向代理:
1、正向代理
通常说的代理即正向代理,正向代理会隐藏真实的请求客户端,比如我们希望访问Google,Google被墙掉了,于是可以在国外搭建一台代理服务器,请求发给代理服务器,服务器向Google发送请求,Google分辨不出真实的用户,将内容返回给代理服务器,代理服务器传递给国内真实的客户端(前提是代理服务器没有被墙掉啊)。
2、反向代理
反向代理隐藏了真实的服务器,Google为全世界提供服务,不可能只有一台实体的服务器,而是有很多台服务器,来自世界各地的请求必定会落实到一台具体的机器上去,落实到谁的头上呢,首先请求发送到一台代理服务器上去,代理服务器根据负载均衡,查看哪一台真实的服务器负载小,就将请求传递到该台服务器上,客户端并不能知道请求的究竟是哪一台服务器。
正反代理都可以隐藏客户端或服务端的真实ip、端口,起到一定的保护作用
3、反向代理的跨域应用
在后端配置access-control-allow-origin是可以的,但前端浏览器可能不支持xhr2,而反向代理则可以完美解决,思路就是将前端请求发送给代理服务器(一般为ngnix),然后由ngnix代为转发。
4、angular2+的反向代理跨域
angular自带的服务器启动选项中有代理选项,真是超级方便,直接配置一个proxy.config.json并在package.json中的start处指定(或者启动的时候在命令行指定)就好了。
注意!此时需要用npm run start启动项目而不能用ng serve启动,否则代理无效
这篇内容完全明确了前后端分离的基础,无必要提供前后端完全分离的代码。
proxy.config.json:
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json",
"build": "ng build --prod --aot",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
}
package.json
{
"/api":{
}
}