当前位置: 首页 > news >正文

高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?

如果有遗漏,评论区告诉我进行补充

面试官: 你对跨域了解多少?

我回答:

跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same-origin policy)。下面我将详细介绍跨域的概念、原因、影响以及解决方法。

一、跨域的概念

跨域是指从一个域名的网页去请求另一个域名的资源时,浏览器出于安全考虑,会限制一些请求。具体来说,如果请求的URL的协议、域名、端口三者中任意一个与当前页面的URL不同,则被认为是跨域请求。
例如,http://example.com:8080https://example.com:8080 被认为是不同的源。

二、跨域问题的背景

跨域问题的本质是浏览器的同源策略(Same-Origin Policy)限制。同源策略是浏览器最核心也最基本的安全功能,用于保证用户信息的安全,防止恶意网站读取另一个网站的数据。

三、跨域问题的常见表现

  1. 无法读取非同源网页的Cookie、LocalStorage和IndexedDB
  2. 无法接触非同源网页的DOM
  3. 无法向非同源地址发送AJAX请求

四、Java后端解决跨域问题的方式

在Java后端,尤其是在使用Spring Boot等框架时,解决跨域问题主要有以下几种方式:

  1. 使用@CrossOrigin注解

    • 注解在方法上:允许特定方法跨域。
    • 注解在类上:允许整个类的所有方法跨域。
    • origins属性:指定允许跨域的源地址,可以使用“*”表示允许所有源。
    • 注意:@CrossOrigin注解只适用于Spring MVC的Controller层。
  2. 通过配置文件实现全局跨域

    • 实现WebMvcConfigurer接口,并重写addCorsMappings方法。
    • 在该方法中,通过CorsRegistry注册跨域映射,设置允许跨域的路径、源地址、HTTP方法等。
  3. 自定义CorsFilter

    • 创建一个CorsFilter的Bean,并在其中配置跨域信息。
    • 这种方式相对灵活,但需要更多的代码量。
  4. 手动设置响应头

    • 在Controller的方法中,通过HttpServletResponse对象手动设置响应头,如Access-Control-Allow-Origin等。
    • 这种方式较为原始,不推荐用于全局跨域配置。
  5. 使用Nginx反向代理

    • 当后端服务无法直接修改响应头时,可以在Nginx中配置反向代理,通过Nginx设置跨域相关的响应头。
    • 这种方式适用于前后端分离的场景,且Nginx作为静态资源服务器或反向代理服务器。
    • 在自己的服务器上设置一个代理,转发请求到目标服务器,这样请求就变成了同源请求。
  6. WebSocket

    • WebSocket协议本身不受同源策略的限制,可以用来绕过跨域问题。
  7. PostMessage API

    • 允许两个不同源的窗口之间进行通信,但实现较为复杂。
  8. JSONP(JSON with Padding)

    • 一种古老的解决方法,利用<script>标签没有跨域限制的特性,但仅限于GET请求,并且有安全风险。

五、CORS通信原理

CORS(Cross-Origin Resource Sharing)是一种基于HTTP的协议,它允许服务器明确表示哪些源站可以通过网页来访问其资源。CORS通过添加额外的HTTP头信息来允许或拒绝跨域请求。

  1. 预检请求(Preflight Request)
    如果请求方法不是GET、HEAD、POST,或者请求中包含了某些自定义的HTTP头部(如Content-Type以外的头部),浏览器会先发送一个OPTIONS方法的预检请求到目标服务器,询问服务器是否允许这样的跨域请求。

  2. 响应头
    服务器需要在响应中包含以下CORS相关的头部:

    • Access-Control-Allow-Origin:指定哪些源可以访问资源,可以是具体的域名或*(允许所有源)。
    • Access-Control-Allow-Methods:列出允许的HTTP方法。
    • Access-Control-Allow-Headers:列出允许的自定义请求头。
    • Access-Control-Max-Age:预检请求的有效期,单位是秒。
  3. 实际请求
    如果预检请求得到服务器的正面响应,浏览器才会发送实际的请求。

六、跨域与JSONP的比较

  • JSONP:一种利用<script>标签不受同源策略限制的特性来实现跨域请求的方法。但JSONP只支持GET请求,且存在安全风险(如XSS攻击)。
  • CORS:比JSONP更强大,支持所有类型的HTTP请求,且更安全。CORS是现代Web开发中解决跨域问题的首选方案。

七、总结

跨域问题是Web开发中常见的问题之一,理解其背后的原理和解决方法对于提升Web应用的安全性和兼容性至关重要。在Java后端开发中,通过合理的配置和使用框架提供的跨域解决方案,可以有效地解决跨域问题。

相关文章:

高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对跨域了解多少? 我回答: 跨域问题&#xff0c;即Cross-Origin Resource Sharing&#xff08;CORS&#xff09;&#xff0c;是现代Web开发中一个非常重要的概念&#xff0c;涉及到浏览器的安全策略——同源策略&#xff08;Same…...

AtCoder Beginner Contest 365 A~E

A.Leap Year&#xff08;思维&#xff09; 题意&#xff1a; 给你一个介于 1583 1583 1583和 2023 2023 2023之间的整数 Y Y Y。 求公历 Y Y Y年的天数。 在给定的范围内&#xff0c; Y Y Y年的天数如下&#xff1a; 如果 Y Y Y不是 4 4 4的倍数&#xff0c;则为 365 365 …...

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署&#xff08;Linux&#xff09; 3.1服务构建打包…...

(回溯) LeetCode 78. 子集

原题链接 一. 题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集 &#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&…...

DQL数据查询语言(多表处理)—/—<7>

一、多表处理 当前有两个表&#xff0c;一个是学生表student&#xff0c;一个是分数表score student表字段名表示如下&#xff08;共1000条数据&#xff09;&#xff1a; score表字段表示如下&#xff08;共6000条数据&#xff09;&#xff1a; 1、求每个学生的总分 SELECT …...

力扣刷题总结

去年有段时间一直在刷题&#xff0c;进步神速&#xff0c;解决了以往刷完就忘的问题&#xff0c;这里总结下经验&#xff0c;给有需要的人参考下&#xff0c;核心观点就仨&#xff1a; 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&#xff08;Field-Oriented Control&#xff09;3.1 引入坐标系3.2 Clarke and Park变换Clarke 变换&#xff08…...

解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题

在使用 IntelliJ IDEA 进行开发时&#xff0c;我们可能会遇到各种编译和运行错误&#xff0c;其中之一就是 Groovy 编译器错误&#xff08;Groovyc: Internal groovyc error: code 1&#xff09;或 JVM 内存不足错误。这类错误可能会影响开发效率&#xff0c;但通过调整 JVM 内…...

LeetCode.2940.找到Alice和Bob可以相遇的建筑

友情提示&#xff1a;这个方法并没有通过案例&#xff0c;只通过了944个案例&#xff08;很难受&#xff09;&#xff0c;超时了&#xff0c;但是想着还是分享出来吧 题目描述&#xff1a; 给你一个下标从 0 开始的正整数数组 heights &#xff0c;其中 heights[i] 表示第 i …...

OFD板式文件创建JAVA工具-EASYOFD 四、文字 Text

JAVA版本的OFD板式文件创建工具easyofd. 功能包含了图像、 图像、 文字、和模版页功能。同时也支持OFD文件的数字签名及验签&#xff0c;电子签章及验签。 本JAVA版本的easyofd使用原生方式创建板式文件&#xff0c;不依赖JAVA的SWT库。 项目地址&#xff1a;http://…...

【概念速通】李群 lie group

李群 lie group 概念速通 快速示例介绍&#xff1a;【引入】单位复数 (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 定义&#xff1…...

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冯诺依曼机的结构特点&#xff1a; 图示&#xff1a; 1.五大部分由运算器(ALU)&#xff0c;控制器(CU)&#xff0c;存储器(主存辅存)&#xff0c;输入设备&#xff0c;输出设备五大部分组成2.指…...

java语言特点

Java语言是一种广泛使用的编程语言&#xff0c;它具有以下几个显著的特点&#xff1a; 面向对象&#xff1a;Java是一种纯面向对象的语言&#xff0c;它支持类的封装、继承和多态等特性。面向对象的设计使得Java程序更加模块化&#xff0c;易于维护和扩展。 平台无关性&#xf…...

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文&#xff0c;特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置&#xff0c;以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…...

大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

MySQl 中对数据表的增删改查(基础)

MySQl 中对数据表的增删改查&#xff08;基础&#xff09; 新增演示插入一条数据插入多条数据 查询全列查询部分列查询查询关于列名的表达式查询时用别名查询去重后的结果查询排序后的结果条件查询比较运算符和逻辑运算符 分页查询 修改删除 黑白图是在命令行里的&#xff0c;彩…...

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版本&#xff1a;ubuntu24.04 主题下载地址&#xff1a;https://github.com/vinceliuice/WhiteSur-gtk-theme 参考的安装教程&#xff1a;https://blog.51cto.com/u_…...

计算机毕业设计选题推荐-办公用品管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

2026年,本地精准营销高性价比服务商来袭,你还不了解一下?

在本地商业竞争日益激烈的2026年&#xff0c;实体店面临着诸多挑战&#xff0c;引流难、成本高、复购率低等问题困扰着众多商家。而中粤&#xff08;广州&#xff09;信息科技有限公司作为本地精准营销的高性价比服务商&#xff0c;正以其独特的优势和卓越的服务&#xff0c;为…...

内网环境下Win7系统批量离线补丁部署实战指南

1. 内网Win7补丁部署的挑战与解决方案老旧Win7系统在内网环境中的安全隐患就像漏雨的屋顶&#xff0c;看似不影响日常使用&#xff0c;但随时可能引发严重后果。我经手过几十家单位的系统加固项目&#xff0c;发现这些场景存在三个典型痛点&#xff1a;首先是补丁来源问题&…...

一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’

实战内存取证&#xff1a;从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中&#xff0c;内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时&#xff0c;传统的磁盘取证可能一无所获&#xff0c;而内存中却保留着攻击行为的完整痕迹。…...

真可用!美团数字人模型开源,MV、电商等统统拿下

美团开源的数字人视频生成框架 LongCat-Video-Avatar 刚刚更新到 1.5 版本。是真能用。这版更新把音频编码器换了&#xff0c;推理步数砍到8步&#xff0c;在770人、13240条主观评分的大规模评测里&#xff0c;雷达图面积全面领先。音频编码器换血&#xff0c;8步出图LongCat-V…...

应对Claude Code访问不稳定,快速切换至Taotoken的应急方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 应对Claude Code访问不稳定&#xff0c;快速切换至Taotoken的应急方案 对于依赖Claude Code进行日常开发或自动化任务的用户来说&a…...

别再把大模型当搜索框了:一文讲透 LLM 的基本原理、能力边界与局限性

写在前面很多人把大语言模型当成“会聊天的搜索引擎”&#xff0c;结果一上线就遇到幻觉、口径不稳、上下文丢失、成本失控。真正理解 LLM&#xff0c;要先抓住一句话&#xff1a;它是基于 Transformer 的概率生成模型&#xff0c;核心能力来自海量预训练、上下文学习与后训练对…...

UE5项目打包后RenderTarget导出图片全黑?手把手教你解决伽马校正与资产打包问题

UE5打包后RenderTarget导出图片全黑的终极解决方案当你花了整整三天时间调试RenderTarget导出功能&#xff0c;终于在编辑器里看到完美的截图效果&#xff0c;却在打包成可执行文件后发现所有导出的图片都变成了一片漆黑——这种从云端跌入谷底的感觉&#xff0c;每个UE开发者都…...

树莓派Zero离线语音交互实战:TTS与STT引擎部署与优化

1. 项目概述&#xff1a;为什么选择树莓派 Zero 来实现语音功能&#xff1f;如果你玩过 Arduino、ESP32 这类微控制器&#xff0c;也接触过树莓派 4B 这样的单板电脑&#xff0c;那你大概能理解那种“选择困难症”&#xff1a;微控制器实时性强、功耗低&#xff0c;但算力有限&…...

【C++】零基础入门 · 第 6 节:数组

上一节我们学习了函数,知道了如何把代码封装起来方便复用。但在实际编程中,你很快就会遇到一个问题:如果要存储 100 个学生的成绩,难道要定义 100 个变量吗?这显然不现实。数组就是 C++ 给出的答案——它让我们能用一个变量名管理一组相同类型的数据。 1. 为什么需要数组…...

OpenCore Legacy Patcher完整指南:让老旧Mac焕发新生,运行最新macOS

OpenCore Legacy Patcher完整指南&#xff1a;让老旧Mac焕发新生&#xff0c;运行最新macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹…...