在浏览器端,一个请求url的协议,域名,端口号三者其中之一与页面的url不一致,则会产生跨域问题。
跨域是跟执行环境有关系,请求数据在浏览器端会受到跨域限制,但是在node就不会产生跨域。 跨域对于浏览器的简单请求来说,request已经发出去了,但是浏览器是拿不到后端返回的response;对于非简单请求,在发出真正的请求之前会有一个预请求,会检查是否允许跨来源请求,如果允许,则会发出真的request,如果发现不允许跨来源请求,则不会发出真正的request。相当于浏览器阻拦的是request,具体哪些是简单请求,哪些是非简单请求,等下会有讲到。
解决办法:
- 1:JSONP的方式
- 2:后端在response中加上一个header,这个header叫Access-Control-Allow-Origin,设置为"localhost:8081",这样就是允许localhost:8081的跨来源请求,如果是针对多个来源,那么只能设置为"*",这就是告诉浏览器,任何跨来源请求都能拿到我的response
- 3:proxy server代理方式
- 浏览器发送请求到proxy,说要拿baidu.com的资料
- proxy server 去请求baidu.com的资料(因为是后端与后端相互获取资料,所以不存在跨域)
- baidu.com回传资料给proxy server
- proxy server把资料传给浏览器,加上cors header