关于跨域(CORS)的一些总结

110 阅读1分钟

在浏览器端,一个请求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代理方式
  1. 浏览器发送请求到proxy,说要拿baidu.com的资料
  2. proxy server 去请求baidu.com的资料(因为是后端与后端相互获取资料,所以不存在跨域)
  3. baidu.com回传资料给proxy server
  4. proxy server把资料传给浏览器,加上cors header

简单请求

非简单请求