CORS就是跨域吗?

首先,跨域的域是什么?

跨域的英文是:Cross-Origin。

Origin 中文含义为:起源,源头,出生地。

在跨域中,"域"指的是一个 Web 资源(比如网页、脚本、图片等)的源头

包括该资源的协议主机名端口号

同源策略中,如果两个资源的域相同,则它们属于同一域,可以自由进行交互和共享数据。

反之,如果两个资源的域不同,就会出现跨域问题

这时就需要特殊的方式来处理,如跨域资源共享(CORS)

那什么是同源策略?

同源策略(Same-Origin Policy)是浏览器中的一项安全机制,用于保护用户的隐私和安全。

它限制了一个网页或者脚本只能从同一个源加载的资源进行访问,而不能访问其他来源的资源。

这样做可以防止恶意网站利用用户身份信息进行跨站请求伪造(CSRF)攻击,保护用户的数据安全。

什么是跨站请求伪造?

跨站请求伪造(CSRF,Cross-Site Request Forgery)是一种网络攻击方式。

在 CSRF 攻击中,攻击者利用已认证的用户身份(例如用户在银行网站上登录后的会话信息)来伪造请求,以执行未经授权的操作。

举个例子:

我登录了银行网站,浏览器根据我的登录信息生成了一个会话令牌,也就是 session token。

但是这个令牌被而恶意网站给拿到了,它拿着我的 token 去服务器发送请求。

就可以把我银行卡里的 29 块八毛五全部转走。

但是如果有同源策略的限制,恶意网站就无法直接发送请求到银行。

我的 29 块八毛五就可以保住。

因为恶意网站的域名与银行网站的域名不同,浏览器会阻止这种抢劫行为。

什么是跨域资源共享(CORS)?

为了防止被面试官笑话,这里一定要知道:

跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种用来解决由于浏览器的同源策略而导致的跨域请求问题的一种机制。

浏览器将 CORS 请求分成两类:

简单请求(simple request)和非简单请求(not-so-simple request)。

什么是简单请求?

只要同时满足以下两大条件,就属于简单请求。

(1)请求方法是以下三种方法之一:
- HEAD
- GET
- POST(2)HTTP的头信息不超出以下几种字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值:application/x-www-form-urlencoded、multipart/form-data、text/plain

简单请求的工作流程如下:

1. 浏览器在请求中增加一个 Origin 头部字段,其中包含当前页面的源信息(协议、主机、端口)。

2. 服务器在收到这个请求后,会根据请求中的 Origin 头部信息来判断是否允许该请求。

3. 如果服务器允许该请求,会在响应头部中包含一个 Access-Control-Allow-Origin 头部,"*"表示允许所有来源。

4. 浏览器在收到响应后,决定是否允许页面访问该资源。

什么是非简单请求?

不是简单请求的,就是非简单请求。

非简单请求它非简单在哪?

或者说:

它非简单又能怎么样?

非简单请求在发起正式请求之前,会先发起一个预检请求

什么是预检请求?

预检请求是用于在实际的跨域请求之前进行探测和验证,以确保服务器能够正确处理,预防跨域请求可能会引发的安全性问题。

一句话就是:

我去前面探探路!

1408339385488_image_70296.jpg

只有得到服务器的肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。


实际 java 开发中的 CORS 解决跨域配置长这样:

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许所有的URL路径都可以跨域访问registry.addMapping("/**")// 允许所有来源(即允许任何域名)的请求跨域访问.allowedOrigins("*")// 允许发送身份验证信息(如cookies、HTTP身份验证或客户端SSL证明).allowCredentials(true)// 允许跨域请求的HTTP方法,包括GET、POST、PUT、DELETE和OPTIONS。.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")// 预检请求(OPTIONS请求)的有效期,单位为秒.maxAge(3600);}
}

还有别的方式可以解决跨域问题吗?

有的。

使用 Nginx 部署为同一域。

什么意思呢?

就是说 Nginx 作为唯一域,代理所有服务端,在客户端眼里,只有 Nginx 这一个域,也就不存在跨域问题,由 Nginx 拿到请求再分发给对应服务器。

这里我们就不再展开。

image.png


往期推荐:

● 师爷,翻译翻译什么叫AOP

● 翻译,师爷师爷什么叫事务

● 纪念JDBC

● SpringBoot实现动态数据源配置‍

● 聚簇索引、回表与覆盖索引

● Java锁到底是个什么东西

三连表情包-留白.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/260347.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知(Compressed Sensing,CS)是一种用于信号处理的技术,旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性,即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

Kubernetes概述

目录 1.K8S 是什么 2.为什么要用 K8S Kubernetes 主要功能如下: 3.Kubernetes 集群架构与组件 Master 组件 Kube-apiserver Kube-controller-manager Kube-scheduler 配置存储中心 etcd Node 组件 Kubelet Kube-Proxy docker 或 rocket 4.Kubernete…

css2背景

css2背景 一.背景颜色二.背景图片三.背景平铺四.背景图片位置五.背景图像固定六.复合型写法七.背景颜色半透明八.总结 一.背景颜色 默认是transparent(透明) 二.背景图片 默认是none 三.背景平铺 默认是background-repeat(平铺) 四.背景图片位置…

Vue中$root的使用方法

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练,今…

ai数字仿真辩论主持人提升用户体验

Ai虚拟主持人是元宇宙和AI人工智能技术在播音主持行业的重要应用,AI虚拟主持人能极大提升新闻资讯内容的精准度,改变单一的播报形式。 首先,AI虚拟主持人极大地提升了节目的制作效率和灵活性。传统主持人需要花费大量时间进行彩排和录制&…

照片去除多余人物的方法分享之三分钟教你怎么去除

在拍摄照片时,有时候会遇到照片中有多余的人物,这会影响照片的美观度和主题表达。去除照片中多余的人物,需要采用一些技巧和方法。本文将介绍几种常用的去除照片中多余人物的方法。 一、使用水印云软件去除多余人物 水印云是一款功能强大的图…

ChatGPT的大致原理

国外有个博主写了一篇博文,名字叫TChatGPT: Explained to KidsQ」, 直译过来就是,给小孩子解释什么是ChatGPT。 因为现实是很多的小孩子已经可以用父母的手机版ChatGPT玩了 ,ChatGPT几乎可以算得上无所不知,起码给小孩…

linux ext3/ext4文件系统(part2 jbd2)

概述 jbd2(journal block device 2)是为块存储设计的 wal 机制,它为要写设备的buffer绑定了一个journal_head,这个journal_head与一个transaction绑定,随着事务状态的转移(运行,生成日志&#…

linux监控系统资源命令

当前CPU内核版本 [rootVM-12-12-centos ~]# cat /proc/version Linux version 3.10.0-1160.11.1.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Fri Dec 18 16:34:56 UTC 2020 当前系统版本 [rootVM-12-1…

RK3588平台开发系列讲解(视频篇)ffmpeg 的移植

文章目录 一、ffmpeg 介绍二、ffmpeg 的组成三、ffmpeg 依赖库沉淀、分享、成长,让自己和他人都能有所收获!😄 📢ffmpeg 是一种多媒体音视频处理工具,具备视频采集功能、视频抓取图像、视频格式转换、给视频加水印并能将视频转化为流等诸多强大的功能。它采用 LGPL 或 G…

2.18号c++

1.菱形继承 1.1 概念 菱形继承又称为钻石继承,是由公共基类派生出多个中间子类,又由多个中间子类共同派生出汇聚子类。汇聚子类会得到多份中间子类从公共基类继承下来的数据成员,会造成空间浪费,没有必要。 问题: …

2.1.1 摄像头

摄像头 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 摄像头是目前自动驾驶车中应用和研究最广泛的传感器,其采集图像的过程最接近人类视觉系统。基于图像的物体检测和识别技术已经相当成熟&#…

外包干了3个多月,技术退步明显。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程

点击下载《Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程》 1. 前言 本文旨在介绍Spring Boot与LiteFlow的集成方法,详细阐述LiteFlow的原理、使用流程、步骤以及代码注释。通过本文,读者将能够了解LiteFlow的特点&#xff…

python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树:翻转…

数据安全之认识数据资产管理平台

文章目录 一、什么是数据资产二、什么是数据资产管理平台1、什么是数据资产管理平台2、为什么需要数据资产管理平台 三、数据资产管理平台的主要功能四、数据资产管理平台的工作原理五、数据资产管理平台的应用场景六、安全资产管理平台与数据资产管理平台的区别与关系1、安全资…

Bert基础(一)--自注意力机制

1、简介 当下最先进的深度学习架构之一,Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrent neural network, RNN)和长短期记忆(long short-term memory, LSTM)网络,并且以它为基础衍生出了诸如BERT、GPT-3、T5等…

从入门到精通:AI绘画与修图实战指南

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在这篇文章中,我们将深入探讨如何利…

一篇博客教会你让Spring扫描自定义注解

文章目录 自定义注解使用注解Spring 管理其他 Spring 支持扫描开发人员自定义的注解,从而使开发人员更加灵活方便地使用注解。 自定义注解 我们可以在我们自定义的注解上添加 Spring 的 Component 注解,这样 Spring 框架就会将我们自定义的注解标识的类…