当前位置:网站首页 > R语言数据分析 > 正文

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



目录

一、什么是跨域

二、同源策略

非同源限制

三、跨域的解决办法

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/httpshttp://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的配置

 

到此这篇cors跨域解决方案(cors跨域问题)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • yarn命令查看日志(yarn 查看日志)2025-01-16 20:36:05
  • uchar i(uchar IRKEY_1=0x45可以吗)2025-01-16 20:36:05
  • args怎么读音(arg英语怎么读)2025-01-16 20:36:05
  • 连接到redis失败(redis连接不上怎么办)2025-01-16 20:36:05
  • score是什么意思(hmscore是什么意思)2025-01-16 20:36:05
  • 查看Docker版本号的命令为(查找docker版本号的命令)2025-01-16 20:36:05
  • pdfview怎么转换成wps(pdfview怎么转换成word)2025-01-16 20:36:05
  • cruise2014安装教程(cruise安装包)2025-01-16 20:36:05
  • ldr指令用法(ldrh指令)2025-01-16 20:36:05
  • ettercap手机版(ettercap-graphical)2025-01-16 20:36:05
  • 全屏图片