什么是跨域问题
跨域问题与浏览器的同源策略有关,那么什么是浏览器的同源策略呢?两个页面地址中的协议、域名和端口号一致,则表示同源。例如地址 https://www.google.com 和以下地址对比:
大多数情况下,在前后端分离的项目中,前端调用后端接口,当前后端不在一个域,就会产生跨域问题。
产生跨域问题的原因:(三个条件同时满足才会产生跨域问题)
浏览器限制
跨域
XMLHttpRequest请求
解决思路
- 浏览器方面,让浏览器不做校验、限制(价值不大,客户端要改动,一般不用)
- 避免发xhr请求(jsonp)用的越来越少,有很多弊端,无法满足现在的开发要求,只能发get请求
- 跨域方面:让被调用方支持跨域(支持跨域)或者调用方使用代理(隐藏跨域);这一解决方法是目前使用最多的
支持跨域:让被调用方修改代码,让其支持跨域,在b域名返回的信息中加入一些字段,告诉浏览器允许a域名的调用
隐藏跨域:(被调用方无法被修改)通过代理,从浏览器发出的都是a域名的请求,在代理里面把指定的url转到b域名中
各解决方案详解
-
在打开浏览器时设置一个参数,禁止浏览器的检查
-
jsonp解决跨域
- 弊端——使用jsonp后台需要做改动、只支持get请求、发出去的不是xhr请求
-
跨域解决
被调用方(服务端代码)设置响应头信息允许前端8081端口的调用,以及允许调用的方法等
后端允许所有域所有方法访问的写法
浏览器在发送跨域请求时,会先判断是简单请求还是非简单请求,如果是简单请求。就先执行后判断,如果是非简单请求就回先发一个预检命令,检查通过之后才会真正的把请求发送出去。