高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?
如果有遗漏,评论区告诉我进行补充
面试官: 你对跨域了解多少?
我回答:
跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same-origin policy)。下面我将详细介绍跨域的概念、原因、影响以及解决方法。
一、跨域的概念
跨域是指从一个域名的网页去请求另一个域名的资源时,浏览器出于安全考虑,会限制一些请求。具体来说,如果请求的URL的协议、域名、端口三者中任意一个与当前页面的URL不同,则被认为是跨域请求。
例如,http://example.com:8080 和 https://example.com:8080 被认为是不同的源。
二、跨域问题的背景
跨域问题的本质是浏览器的同源策略(Same-Origin Policy)限制。同源策略是浏览器最核心也最基本的安全功能,用于保证用户信息的安全,防止恶意网站读取另一个网站的数据。
三、跨域问题的常见表现
- 无法读取非同源网页的Cookie、LocalStorage和IndexedDB。
- 无法接触非同源网页的DOM。
- 无法向非同源地址发送AJAX请求。
四、Java后端解决跨域问题的方式
在Java后端,尤其是在使用Spring Boot等框架时,解决跨域问题主要有以下几种方式:
-
使用@CrossOrigin注解
- 注解在方法上:允许特定方法跨域。
- 注解在类上:允许整个类的所有方法跨域。
- origins属性:指定允许跨域的源地址,可以使用“*”表示允许所有源。
- 注意:@CrossOrigin注解只适用于Spring MVC的Controller层。
-
通过配置文件实现全局跨域
- 实现WebMvcConfigurer接口,并重写addCorsMappings方法。
- 在该方法中,通过CorsRegistry注册跨域映射,设置允许跨域的路径、源地址、HTTP方法等。
-
自定义CorsFilter
- 创建一个CorsFilter的Bean,并在其中配置跨域信息。
- 这种方式相对灵活,但需要更多的代码量。
-
手动设置响应头
- 在Controller的方法中,通过HttpServletResponse对象手动设置响应头,如Access-Control-Allow-Origin等。
- 这种方式较为原始,不推荐用于全局跨域配置。
-
使用Nginx反向代理
- 当后端服务无法直接修改响应头时,可以在Nginx中配置反向代理,通过Nginx设置跨域相关的响应头。
- 这种方式适用于前后端分离的场景,且Nginx作为静态资源服务器或反向代理服务器。
- 在自己的服务器上设置一个代理,转发请求到目标服务器,这样请求就变成了同源请求。
-
WebSocket
- WebSocket协议本身不受同源策略的限制,可以用来绕过跨域问题。
-
PostMessage API
- 允许两个不同源的窗口之间进行通信,但实现较为复杂。
-
JSONP(JSON with Padding)
- 一种古老的解决方法,利用
<script>标签没有跨域限制的特性,但仅限于GET请求,并且有安全风险。
- 一种古老的解决方法,利用
五、CORS通信原理
CORS(Cross-Origin Resource Sharing)是一种基于HTTP的协议,它允许服务器明确表示哪些源站可以通过网页来访问其资源。CORS通过添加额外的HTTP头信息来允许或拒绝跨域请求。
-
预检请求(Preflight Request):
如果请求方法不是GET、HEAD、POST,或者请求中包含了某些自定义的HTTP头部(如Content-Type以外的头部),浏览器会先发送一个OPTIONS方法的预检请求到目标服务器,询问服务器是否允许这样的跨域请求。 -
响应头:
服务器需要在响应中包含以下CORS相关的头部:Access-Control-Allow-Origin:指定哪些源可以访问资源,可以是具体的域名或*(允许所有源)。Access-Control-Allow-Methods:列出允许的HTTP方法。Access-Control-Allow-Headers:列出允许的自定义请求头。Access-Control-Max-Age:预检请求的有效期,单位是秒。
-
实际请求:
如果预检请求得到服务器的正面响应,浏览器才会发送实际的请求。
六、跨域与JSONP的比较
- JSONP:一种利用
<script>标签不受同源策略限制的特性来实现跨域请求的方法。但JSONP只支持GET请求,且存在安全风险(如XSS攻击)。 - CORS:比JSONP更强大,支持所有类型的HTTP请求,且更安全。CORS是现代Web开发中解决跨域问题的首选方案。
七、总结
跨域问题是Web开发中常见的问题之一,理解其背后的原理和解决方法对于提升Web应用的安全性和兼容性至关重要。在Java后端开发中,通过合理的配置和使用框架提供的跨域解决方案,可以有效地解决跨域问题。
相关文章:
高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?
如果有遗漏,评论区告诉我进行补充 面试官: 你对跨域了解多少? 我回答: 跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same…...
AtCoder Beginner Contest 365 A~E
A.Leap Year(思维) 题意: 给你一个介于 1583 1583 1583和 2023 2023 2023之间的整数 Y Y Y。 求公历 Y Y Y年的天数。 在给定的范围内, Y Y Y年的天数如下: 如果 Y Y Y不是 4 4 4的倍数,则为 365 365 …...
多机部署, 负载均衡-LoadBalance
目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署(Linux) 3.1服务构建打包…...
(回溯) LeetCode 78. 子集
原题链接 一. 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…...
DQL数据查询语言(多表处理)—/—<7>
一、多表处理 当前有两个表,一个是学生表student,一个是分数表score student表字段名表示如下(共1000条数据): score表字段表示如下(共6000条数据): 1、求每个学生的总分 SELECT …...
力扣刷题总结
去年有段时间一直在刷题,进步神速,解决了以往刷完就忘的问题,这里总结下经验,给有需要的人参考下,核心观点就仨: 1. 打好数据结构与算法基础 2. 多刷题多练习 3. 形成自己的知识体系 下图是我梳理的知识体…...
BLDC ESC 无刷直流电子调速器驱动方式
BLDC ESC 无刷直流电子调速器驱动方式 1. 源由2. 驱动方法2.1 Trapezoidal 1202.2 Trapezoidal 1502.3 Sinusoidal 1802.4 Field-Orientated Control (FOC) 3. FOC(Field-Oriented Control)3.1 引入坐标系3.2 Clarke and Park变换Clarke 变换(…...
解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题
在使用 IntelliJ IDEA 进行开发时,我们可能会遇到各种编译和运行错误,其中之一就是 Groovy 编译器错误(Groovyc: Internal groovyc error: code 1)或 JVM 内存不足错误。这类错误可能会影响开发效率,但通过调整 JVM 内…...
LeetCode.2940.找到Alice和Bob可以相遇的建筑
友情提示:这个方法并没有通过案例,只通过了944个案例(很难受),超时了,但是想着还是分享出来吧 题目描述: 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i …...
OFD板式文件创建JAVA工具-EASYOFD 四、文字 Text
JAVA版本的OFD板式文件创建工具easyofd. 功能包含了图像、 图像、 文字、和模版页功能。同时也支持OFD文件的数字签名及验签,电子签章及验签。 本JAVA版本的easyofd使用原生方式创建板式文件,不依赖JAVA的SWT库。 项目地址:http://…...
【概念速通】李群 lie group
李群 lie group 概念速通 快速示例介绍:【引入】单位复数 (The unit complex numbers) 是李群 (lie group) 最简单的例子之一【进一步】SO(2): The 2D rotation matrices【Typical uses】SE(2): Pose of a robot in the plane Group & Lie Group 定义࿱…...
day_39
198. 打家劫舍 class Solution:def rob(self, nums: List[int]) -> int:if len(nums) 1:return nums[0]dp [0] * len(nums)dp[0], dp[1] nums[0], max(nums[0], nums[1])for i in range(2, len(nums)):dp[i] max(dp[i - 1], dp[i - 2] nums[i])return dp[len(nums) - …...
计算机系统层次结构
1.计算机系统的组成 计算机系统的组成硬件系统软件系统 2.计算机的硬件部分 2.1冯诺依曼机的结构特点: 图示: 1.五大部分由运算器(ALU),控制器(CU),存储器(主存辅存),输入设备,输出设备五大部分组成2.指…...
java语言特点
Java语言是一种广泛使用的编程语言,它具有以下几个显著的特点: 面向对象:Java是一种纯面向对象的语言,它支持类的封装、继承和多态等特性。面向对象的设计使得Java程序更加模块化,易于维护和扩展。 平台无关性…...
单元测试注解:@ContextConfiguration
ContextConfiguration注解 ContextConfiguration注解主要用于在Spring框架中加载和配置Spring上下文,特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置,以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…...
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
MySQl 中对数据表的增删改查(基础)
MySQl 中对数据表的增删改查(基础) 新增演示插入一条数据插入多条数据 查询全列查询部分列查询查询关于列名的表达式查询时用别名查询去重后的结果查询排序后的结果条件查询比较运算符和逻辑运算符 分页查询 修改删除 黑白图是在命令行里的,彩…...
LVS知识点整理及实践
LVS知识点整理及实践 LVSlvs集群概念lvs概念lvs集群类型lvs-nat模型数据逻辑: lvs-DR模式数据传输和过程:特点: lvs-tun模式数据传输过程:特点: lvs-fullnet模式数据传输过程 lvs调度算法lvs调度算法类型lvs静态调度算法lvs动态调度算法4.15版本内核以后新增调度算法 ipvsadm命…...
Ubuntu gnome WhiteSur-gtk-theme类mac主题正确安装和卸载方式
目录 摘要目的安装和卸载特别说明 Ubuntu gnome WhiteSur-gtk-theme类mac主题正确安装和卸载方式 摘要 Ubuntu版本:ubuntu24.04 主题下载地址:https://github.com/vinceliuice/WhiteSur-gtk-theme 参考的安装教程:https://blog.51cto.com/u_…...
计算机毕业设计选题推荐-办公用品管理系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
windows java jar 包后台运行
使用 javaw 实现后台运行(简单场景)这是最简单的方法。Java 自带的 javaw.exe 是 java.exe 的变体,它运行程序时不会打开任何控制台窗口。操作步骤:创建一个新的文本文件,命名为 start.bat。在文件中写入以下内容&…...
PS CC 2019安装避坑指南:解决86%卡住和D3DCOMPILER_47.dll缺失问题
Photoshop CC 2019完整安装指南:从下载到故障排除 Photoshop CC 2019作为Adobe Creative Cloud系列中的重要版本,至今仍被许多设计师和摄影师所青睐。虽然Adobe已推出更新的版本,但2019版因其稳定性和适中的系统需求,依然是中低配…...
Beyond Compare 5密钥生成终极指南:轻松解决评估模式错误
Beyond Compare 5密钥生成终极指南:轻松解决评估模式错误 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否曾遇到Beyond Compare 5弹出"评估模式错误"的困扰…...
Qwen3-14B应用案例:智能客服与内容生成,企业落地实操
Qwen3-14B应用案例:智能客服与内容生成,企业落地实操 1. 为什么选择Qwen3-14B作为企业AI解决方案 在当今企业数字化转型浪潮中,AI技术正从实验室走向实际业务场景。Qwen3-14B作为140亿参数的大型语言模型,在能力与资源消耗之间取…...
一键启动翻译服务:Hunyuan-MT-7B-WEBUI详细使用教程(附加速链接)
一键启动翻译服务:Hunyuan-MT-7B-WEBUI详细使用教程(附加速链接) 1. 为什么选择Hunyuan-MT-7B-WEBUI 在全球化交流日益频繁的今天,语言障碍成为许多企业和个人面临的现实挑战。传统翻译工具要么准确度不足,要么部署复…...
告别Keil5刺眼白屏!保姆级教程教你配置VS Code同款暗黑主题(附3套配色方案)
Keil5暗黑主题终极改造指南:从护眼原理到深度定制 凌晨三点的实验室里,显示屏刺眼的白光让我的眼球开始灼烧般疼痛——这是许多嵌入式开发者共同的噩梦。Keil5作为单片机开发的主流工具,其默认的亮色主题在长时间编码时带来的视觉负担远超你的…...
2026年华为云OpenClaw如何安装?配置百炼API零门槛10分钟步骤
2026年华为云OpenClaw如何安装?配置百炼API零门槛10分钟步骤。OpenClaw(曾用名Clawdbot)是一款轻量化、可扩展的开源AI智能体执行框架,支持自然语言指令驱动、多模型灵活切换与全场景任务自动化。对于新手而言,阿里云轻…...
Kandinsky-5.0-I2V-Lite-5s企业应用:HR招聘海报→候选人互动式动态介绍视频生成
Kandinsky-5.0-I2V-Lite-5s企业应用:HR招聘海报→候选人互动式动态介绍视频生成 1. 引言:让招聘海报"活"起来 想象一下这样的场景:你的HR团队精心设计了一份招聘海报,但投递量却不如预期。问题可能出在传统静态海报难…...
Llama-3.2V-11B-cot实战:基于SpringBoot构建企业级智能客服原型
Llama-3.2V-11B-cot实战:基于SpringBoot构建企业级智能客服原型 最近在帮一个朋友的公司做技术选型,他们想快速搭建一个智能客服原型,既要成本可控,又要能快速集成到现有的Java技术栈里。聊了一圈,发现很多团队都卡在…...
MDXEditor指令系统详解:如何扩展Markdown语法
MDXEditor指令系统详解:如何扩展Markdown语法 【免费下载链接】editor A rich text editor React component for markdown 项目地址: https://gitcode.com/gh_mirrors/editor/editor MDXEditor是一个功能丰富的React组件,专为Markdown编辑设计&am…...
