跨域 CORS

CORS跨域详解 那这些响应头都具体是神马作用呢?下面会结合demo来了解各参数的配置作用,并给出结果图。 阅读详情

一 介绍

当HTTP请求一个域名、协议、端口任意之一与当前网页都不同的资源时,即为跨域请求。在浏览器中,为了安全,会限制脚本的跨域请求。CORS(Cross-Origin Resource Sharing)是一个通过HTTP头部实现脚本跨域的机制。

二 原理

当浏览器在域名A的网页内向域名B的资源发起跨域请求时,域名B的服务器会设置响应头部,告诉浏览器,该域资源允许什么域的跨域请求、允许什么头部、允许什么请求方法。如果该域的请求不被B域允许,浏览器则不会暴露响应给脚本代码,即浏览器其实收到了响应。

发起跨域请求时,也会带上CORS相关的请求头部,如Origin,表明跨域来源,等等


跨域请求的过程分两种:

  • 当发起简单的跨域请求时(如GET请求或常用MIME类型的POST请求时),直接发起跨域请求。
  • 当跨域请求复杂时(即非上述情况),会发起预请求(preflight,一个OPTIONS类型请求,也会带上CORS相应头部),查看B域支持的跨域请求。如果不被允许,则结束,否则发起真正的请求。

为什么跨域请求复杂时需要预请求?因为,即使跨域请求不被其他域允许,但该请求实际上是请求成功了,会对其他域服务器的数据造成副作用。因此先发送预请求,不被允许则直接结束。


默认情况下,跨域请求不会携带凭证(credentials,包含cookies和其他HTTP认证数据),并忽略响应的cookie设置。

但浏览器端可设置withCredentials 为true,允许跨域请求时携带凭证。此时服务端必须设置Access-Control-Allow-Credentials字段,允许发起请求,并保存响应消息的cookie设置。

注意,携带的cookie和设置的cookie,都是被请求域相关的,因此不能在Devtool工具中的Application栏看到cookie,需要打开对应域名的网页才能看到被设置的cookie。

三 头部字段

这里介绍几个重要的响应头字段,并且一般都是对预请求响应的头字段:

  • Access-Control-Allow-Origin:表示什么域可以请求该域,*表示所有域都可请求该域。
  • Access-Control-Allow-Headers:实际请求可用的头字段
  • Access-Control-Allow-Methods:实际请求可用的请求方法
  • Access-Control-Max-Age:预请求响应结果被缓存的时间,-1表示不缓存。
  • Access-Control-Allow-Credentials:表示是否允许跨域请求携带凭证。当浏览器的凭证模式为 include时,即请求携带凭证,该字段必须为true,此时服务端设置的cookie可以保存在浏览器上。注意,允许发送凭证时,响应头部Access-Control-Allow-Origin不能为*

所有头字段,请见参考。

四 使用

下面来看看具体使用。后端使用spring MVC,使用注解@CrossOrigin产生对应头字段,tomcat运行在80端口,部分代码如下:

@CrossOrigin(value = "http://127.0.0.1:63543",allowCredentials = "true")
@GetMapping("/test")
public Map<String,Object> test(HttpSession session,String name){
    Map<String,Object> status=new HashMap<>();

    String lastName= (String) session.getAttribute("name");
    status.put("msg","you last record name:"+lastName);

    session.setAttribute("name",name);

    return status;
}

这里设置了,只允许http://127.0.0.1:63543下的跨域请求,允许发送凭证。

下面在http://127.0.0.1:63543下(这里使用Node做服务器)发送跨域请求,并携带cookie:
在这里插入图片描述
可以看到,也能跨域使用会话了。

如果你用DevTool查看cookie的话,你是查不到的,它被保存在了http://localhost域下,详细见第二章。

参考

用node实现cors跨域 1. 关于跨域 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,会导致跨域拿不到响应内容。 当一个请求 url 的协议、域名、端口三者之间任意一个与当前页面 url 不同即为跨域 https://(协议)\color{#0000FF}{https://}(协议)https://(协议)www.baidu.com(主机)\color{#FF0000}www.baidu.com(主机)www.baidu.com(主机):8080(端口号):\color{#FF00FF}8080(端口号 阅读详情

相关推荐

如何用CORS来解决JS中跨域的问题

最近楼主在写代码的时候遇到了一个比较纠结的问题,需要在http请求的页面调用HTTPS的请求,但因为进行了跨域,导致请求失败。在这个过程中,楼主找了很多办法,如JSONP等,但都不能满足我的需求,后来,楼主发现,CORS提供了一套AJAX跨域问题的解决方案。 CORS的原理:CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求

u014381863的博客 3634

【开发篇】明明设置允许跨域,为什么还会出现跨域请求的问题

1、为什么会出现跨域问题? 2、allowCredentials参数有什么作用? 3、微服务项目如何正确配置跨域支持? 4、Spring Boot如何配置跨域支持? 5、Spring Cloud Gateway如何配置跨域支持?

求索 3239

1.全基因组重测序数据分析介绍

二代测序原理及fastq数据解读、全基因组重测序数据分析内容

weixin_53682198的博客 1881

HTTP 跨域名请求(CORS)

​在 HTML 中,等标签以及 Ajax 都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。HTML中a/form/img/css/script/iframe/ajax都可以指向资源发起请求的资源所在域不同于该请求所指向资源所在的域的HTTP请求就叫做跨域HTTP请求。

小楼一夜听春雨,深巷明朝卖杏花 1427

Axure RP 10表单数据提交制作

本文介绍了如何使用Axure RP 10实现表单数据提交。

Peppaaa的博客 990

Camera tuning flow相机调试流程

相机调试流程分为三大模块:ProcessRaw处理原始数据(黑电平校正、阴影校正),3A实现自动控制(曝光/对焦/白平衡),ISP进行图像精加工(伽马校正、锐化降噪、色彩处理)。三个阶段环环相扣,前阶段为后阶段提供基础,最终输出画质优良且风格化的图像。

weixin_64706696的博客 1229

通过服务器配置cros来解决跨域问题

跨域问题是指浏览器执行的 JavaScript 代码试图通过 XMLHttpRequest 或 Fetch API 等方式向不同域(协议、主机、端口)的服务器发起请求时所遇到的限制。在服务器之间通信的情况下,由于没有浏览器的参与,跨域问题并不会存在。服务器可以自由地与其他服务器进行通信,无需考虑同源策略的限制。

qq_35693377的博客 1572

东方财富网API接口逆向分析:手把手教你破解那个带jQuery回调的股票数据接口

本文详细解析了东方财富网股票数据API接口的逆向工程实战技巧,重点介绍了JSONP接口的核心机制、参数解析及数据处理方法。通过Python代码示例演示了如何构造请求、处理分页数据及应对反爬策略,帮助开发者高效获取股票数据。文章还提供了完整的爬虫实现案例和常见问题排查指南。

weixin_30790841的博客 715

【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案

CORS问题是前端开发中常见的一个挑战,但通过合理的代理配置和服务器设置可以有效解决。在不同环境下,可以使用Vite的代理功能、设置请求头、JSONP、服务器端代理、Nginx代理等多种方式来解决跨域问题。

Allen- 1万+

Xilinx GTY Transceiver时钟方案与功耗优化实践

本文详细解析了Xilinx GTY Transceiver的时钟方案设计与功耗优化实践,涵盖从基础配置到高速24.33024Gbps和中速10.1376Gbps的实战案例。通过Transceivers Wizard的IP设计技巧和动态功耗优化方法,帮助工程师有效降低FPGA系统功耗,提升高速串行通信的稳定性与效率。

weixin_28736355的博客 228

Stata做DID平行趋势检验,用coefplot画图时遇到的3个坑及解决办法

本文详细解析了使用Stata进行DID平行趋势检验时,利用coefplot绘图可能遇到的三个常见问题及其解决方案。包括基线期选择陷阱、置信区间变形和图形元素错位,提供专业调试步骤和高阶技巧,帮助研究者高效完成学术级图表绘制。

weixin_42530458的博客 324

03Web服务器基础-19. HTTP协议请求部分详解

03Web服务器基础-19. HTTP协议请求部分详解

学无止境 822

YOLOv11改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov11精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 1823

Cors解决跨域问题

问题 问题:axios请求,出现两次request,其中一次Request Method: OPTIONS 原因:跨域原因 跨域问题 什么是跨域 跨域是指跨域名访问,一下情况都属于跨域: 跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 www.jd.com:8080 与 www.jd.com:8081 二级域名不同 item.jd.com 与 miaosha.jd.com 如果域名和端口都相同,但是请求

BadCoder的博客 1万+

RK3568平台(camera篇)点亮imx586摄像头

mipi摄像头硬件确认点:1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接3.3V。2,时钟:MCLKOUT是24兆时钟。3.4组差分mipi线。mipi的data线的波形为方波。

weixin_49303682的博客 7258

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CORS解决跨域问题

text/plain;请求中的任意对象均没有注册任何事件监听器;请求中没有使用对象。请求中没有手动设置过请求头(例如,使用。

weixin_68901096的博客 2183

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

解决CORS跨域问题

CORS跨域问题,是当前主流web开发人员都绕不开的难题。但我们首先要明确以下几点跨域只存在于浏览器端,不存在于安卓/ios/Node.js/python/ java等其它环境跨域请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。之所以会跨域,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。

学习总结 1907

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

cors实现请求跨域

简介 CORS:全称"跨域资源共享"(Cross-origin resource sharing)。 CORS需要浏览器和服务器同时支持,才可以实现跨域请求,目前几乎所有浏览器都支持CORS,IE则不能低于IE10。CORS的整个过程都由浏览器自动完成,前端无需做任何设置,跟平时发送ajax请求并无差异。so,实现CORS的关键在于服务器,只要服务器实现CORS接口,就可以实现跨域通信。 请...

badmoonc的博客 6万+

浅谈CORS跨域

跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。

技术杠精的博客 5286

CORS就是跨域吗?

同源策略(Same-Origin Policy)是浏览器中的一项安全机制,用于保护用户的隐私和安全。它限制了一个网页或者脚本只能从同一个源加载的资源进行访问,而不能访问其他来源的资源。这样做可以防止恶意网站利用用户身份信息进行跨站请求伪造(CSRF)攻击,保护用户的数据安全。跨站请求伪造(CSRF,Cross-Site Request Forgery)是一种网络攻击方式。在 CSRF 攻击中,攻击者利用已认证的用户身份(例如用户在银行网站上登录后的会话信息)来伪造请求,以执行未经授权的操作。

sdgfafg_25的博客 997

跨域及cors解决跨域

跨域问题及Springboot处理cors跨域

weixin_50769390的博客 2062

原生ajax 跨域 cors跨域 解决跨域 同源策略的问题 cors跨域传递cookie的方式

let ajax =new XMLHttpRequest(); ajax.open("GET",'http://XXXXXXXX',true); //true表示异步,false表示同步但是现在同步的方式基本被废除了,同步会在浏览器出现警告,提示用户体验不好 ajax.send(); ajax.onreadystatechange= function(){ //readyState 有...

时间在飞飞的博客 1137

CORS跨域漏洞的学习

从浏览器的同源策略说起 SOP,同源策略 (Same Origin Policy),该策略是浏览器的一个安全基石,如果没有同源策略,那么,你打开了一个合法网站,又打开了一个恶意网站。恶意网站的脚本能够随意的操作合法网站的任何可操作资源,没有任何限制。 浏览器的同源策略规定:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。那么何为同源呢,即两个站点需要满足同协议,同域名,同端口这三个条...

weixin_45116657的博客 4198

CORS跨域问题的实现

接3个月前写的一篇文章 为什么要禁止跨域的 Ajax 请求? 为什么现在才接着写?很简单,回顾旧的知识的时候忽然发现跨域问题的实现有点忘记了,现在借此机会回忆一下。 CORS的实现相对简单: 浏览器端都有浏览器自动完成,我们无需操心 服务端可以通过拦截器统一实现,不必每次都去进行跨域判定的编写。 事实上,SpringMVC已经帮我们写好了CORS的跨域过滤器:CorsFilter ,内部已经...

BestQiang的博客 6202

使用CORS解决跨域问题

1.跨域问题 1.1 什么是跨域 跨域是指跨域名的访问,以下情况都属于跨域: 跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 www.jd.com:8080 与 www.jd.com:8081 二级域名不同 item.jd.com 与 miaosha.jd.com 如果域名和端口都相同,但是请求路径不同,不属于跨...

weixin_34163553的博客 1570
上一篇: Node.js
下一篇: vscode cpu占用率过高
千霜
博客等级 码龄11年 85粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值