目录
一、什么是跨域
二、同源策略
非同源限制
三、跨域的解决办法
CORS
3.1、两种请求
3.1.1、简单请求
3.1.2、非简单请求
3.2、CORS常用解决跨域的方法
3.2.1、HttpServletResponse添加头信息
3.2.2、使用Spring注解@CrossOrigin
3.2.3、通过配置类解决跨域
当一个请求的url的协议、域名、端口任意一个与当前页面的url不同即为跨域
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同":
同源策略确保一个应用中的资源只能被本应用的资源访问。
浏览器的同源策略,帮我们解决了很多安全性的问题
与此同时,同源策略带来的问题,A页面想要获取B页面的资源怎么办?
CORS
CORS(Cross-Origin Resource Sharing)是一个W3C标准,全称“跨域资源共享”
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉
它允许浏览器向跨域服务器,发出XMLHttpRequest请求,从而解决Ajax只能同源使用的限制
浏览器将cors请求分为两类:简单请求和非简单请求
只要同时满足以下条件,就属于简单请求
1、请求方法为以下三种之一
HEAD
GET
POST
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-type 只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
凡是不满足以上条件,就属于非简单请求
3.1.1、简单请求
对于简单请求,浏览器直接发送请求。在请求头信息中,添加一个Origin字段,Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求
服务端处理
添加相应响应头信息
CORS请求默认不发送Cookie数据,如果要传送cookie数据,则需在前端Ajax请求中打开withCredentials属性
需要注意的是,如果要发送Cookie,就不能设为星号,必须指定明确的、与请求网页一致的域名
3.1.2、非简单请求
预检请求
非简单请求是那种对服务器有特殊要求的请求,比如请求方法是或,或者字段的类型是。
非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的请求,否则就报错。
服务端处理
前端发送Ajax请求
3.2.1、HttpServletResponse添加头信息
3.2.2、使用Spring注解@CrossOrigin
3.2.3、通过配置类解决跨域
使用HttpServletResponse对象或注解方式,需要在每个需要跨域的方法上都加上相应的注解或参数,我们想让所有的controller都添加跨域功能,我们可以通过实现WebMvcConfigurer接口来自定义跨域配置
WebMvcConfigurer是一个接口,提供很多自定义的拦截器,例如跨域设置、类型转化器等springMVC的配置
到此这篇cors跨域解决方案(cors跨域问题)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/65880.html