跨域问题
本页面url和请求url两者之间,协议、端口、域名只要有一种不同就会出现跨域问题。跨域问题本质是get请求可以发出去,服务端也可以正常响应,但是被浏览器当作不安全操作拦截了(拦截响应,阻止用户读取另一个域名下的数据),服务器之间没有跨域请求这个说法。
解决方案如下:
1.jsonp
带src的标签可以加载跨域资源,不受限制。经典做法是在script标签中的src中放跨域url,加载资源,在本页面中设置回调函数,取到资源。缺点是只支持get请求。
2.cors
和前端无关,重点是后端设置允许哪些url可以进行跨域操作,用户不需要做额外操作。发出cors请求,浏览器自动添加origin在http头中,服务器根据origin信息判断是否在允许范围内,在的话就可以进行跨域,不在的话浏览器报错。
3.vue代理(proxy)
vue 中的 proxy 就是利用了 服务器之间无跨域问题。配置vue.config.js文件,改写url,使它和要访问的url同源。
4.Node中间件代理(两次跨域)
设置代理服务器
(1)客户端给代理服务器发送请求
(2)代理服务器向跨域服务器转发请求
(3)跨域服务器响应
(4)代理服务转发响应给客户端
5.nginx反向代理
用户输入url,我nginx配置你的url指向某个服务器就行了,反向代理代理的是服务器,分发浏览器请求给服务器。
优点:1对外隐藏真正服务器的地址,2分发请求减轻了服务器压力
反向代理和正向代理区别(正向代理代表:node中间件代理,vue代理)
1.正向代理用户需要知道跨域服务器端口和地址,反向代理用户不需要知道
2.正向代理服务器不知道谁在访问,反向代理用户不知道访问的是谁
用两幅图更形象的理解正向和反向代理,
来源:https://www.zhihu.com/question/24723688
我有疑惑:正向代理和反向代理中,代理服务器的url怎么设置,不得考虑跨域问题吗。