跨域的解决方案:nginx
一:解决方案
1、 通过jsonp跨域 2、 document.domain + iframe跨域 3、 location.hash + iframe 4、 window.name + iframe跨域 5、 postMessage跨域 6、 跨域资源共享(CORS) 7、 nginx代理跨域 8、 nodejs中间件代理跨域 9、 WebSocket协议跨域
二:使用nginx代理跨域
使用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。
实现思路:通过nginx配置一个代理服务器(域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域登录。
三:正向代理和反向代理
实践中客户端无法直接跟服务端发起请求的时候,我们就需要代理服务。代理可以实现客户端与服务端之间的通信,我们的Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理,正向代理的代理对象是客户端,反向代理的代理对象是服务端
server { resolver 192.168.1.1; #指定DNS服务器IP地址 listen 8080; location / { proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址 //$http_host$request_uri指明目的主机和uri,属于nginx变量,一般不需要修改。 } }
- 反向代理 1.概念:在服务端配置代理服务器。客户端不需要任何配置就能访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外就一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。 代理对象是服务端,不知道客户端是谁。
2.配置:nginx配置如下
server { listen 80; //listen:配置nginx监听浏览器请求的端口号 location /demo { proxy_pass http://127.0.0.1:8081; //proxy_pass:配置接收到被代理浏览器发来的请求之后,需要帮忙执行的请求是什么 } location /demo1 { proxy_pass http://127.0.0.1:8082; } }
启动demo和demo1两个工程之后,浏览器输入下面地址:
可以看到,外部统一使用80端口访问服务时,nginx根据路径前缀进行代理,然后返回执行结果。对于nginx反向代理路径配置有几点需要注意,使用时要非常谨慎。
四:vuejs开发服务器的代理
参考:
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
多线程 : 读写锁实现缓存系统