首先跨域的问题是由于浏览器的同源策略导致的,同源策略就是访问请求只能针对
1、同一个IP 2 、同一个端口 3、同一个协议下的资源。
如果超出此范围就会出现跨域的错误。
CORS
对于跨域的错误,很影响到我们的开发工作。为了解决这个问题,CORS出现了,基本思想就是使用额外的请求头让浏览器和服务器之间经行沟通,从而决定是否接受跨域请求。
浏览器在跨域访问的时候会自动添加HTTP头信息或者发起预检测请求,对于是否支持跨域请求,关键在于服务器是否做了CORS的配置,允许跨域访问。
跨域请求分为简单请求和非简单请求。
简单请求
请求方法是以下3种之一:
GETPOSTHEADHTTP头信息不超出以下字段:
AcceptAccept-LanguageContent-LanguageLast-Event-IDContent-Type:仅限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain对于简单请求的跨域处理:浏览器在发送请求的时候会在请求头上面添加一个Origin字段, 包含了要跨域的信息, 服务器在接受到此请求之后,会判断是否能够跨域处理,如果能够处理的话,就会在往浏览器返回带有 Access-Control-Allow-Origin字段 的HTTP响应,否则就不会发送,浏览器也能够判断出不允许跨域,抛出错误。
非简单请求
除去简单请求之外的所有请求, 例如 json格式的数据传递。
此请求对待跨域的处理:浏览器会发起预检查请求,在正式请求之前会发送一个OPTION请求,得到肯定的答复后继续发出XMLhttpRequest请求。
OPTION请求 : 询问服务器当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP方法和头字段。
解决跨域
同过对请求添加额外的HTTP头信息即可。
1、浏览器配置
禁用了浏览器的跨域检查,使浏览器不再对比Origin是否被服务器允许,即可发出正常的请求。
2、服务器配置
直接配置CORS。spring boot中添加 注解 @CrossOrigin
针对问题
1、跨域是客户端抛出的
2、会发送 OPTION请求。