cors跨域解决方案(cors跨域问题)

cors跨域解决方案(cors跨域问题)p id main toc strong 目录 strong p 一 什么是跨域 二 同源策略 非同源限制 三 跨域的解决办法 CORS 3 1 两种请求 3 1 1 简单请求 3 1 2 非简单请求 3 2 CORS 常用解决跨域的方法 3 2 1 HttpServletR 添加头信息 3 2

大家好,我是讯享网,很高兴认识大家。



 <p id="main-toc"><strong>目录</strong></p> 

讯享网

一、什么是跨域

二、同源策略

非同源限制

三、跨域的解决办法

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不同即为跨域

讯享网
当前页url 请求url 是否为跨域 http://test.com/ http://test.com/show.html 否(同源) http://www.test.com/ https://www.test.com/index.html 跨域 协议不同 http/https http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu) http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001)

同源策略(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的配置

讯享网


小讯
上一篇 2025-06-14 23:48
下一篇 2025-06-13 17:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/172918.html