ChatGPT:SpringBoot解决跨域问题方法-手动设置请求头

ChatGPT:SpringBoot解决跨域问题方法-手动设置请求头



在这里插入图片描述

这里的设置响应头是为了发送请求方还是接收请求方

设置响应头是为了发送请求方。具体来说,添加 Access-Control-Allow-Origin 头部是为了告诉浏览器,哪些域名可以访问资源。当设置为 * 时,表示允许所有域名访问。这个设置主要用于解决跨域资源共享(CORS)问题。

代码示例解释:

@RequestMapping("/index")
public String index(HttpServletResponse response) {response.addHeader("Access-Allow-Control-Origin", "*");return "index";
}

在这个代码中,当客户端(如浏览器)访问 /index 端点时,服务器会在响应头中添加 Access-Allow-Control-Origin: *,表示允许任何域名访问该资源。这样做的目的是让浏览器知道它可以接受该响应,即使请求来自于不同的域名。

需要注意的是,这种方式虽然方便,但使用 * 允许所有域名访问可能存在安全隐患,通常在生产环境中会指定具体的域名,而不是使用 *


所以防止跨域是谁做出的举动呢

防止跨域请求的措施主要是由浏览器做出的。具体来说,浏览器会根据同源策略(Same-Origin Policy)来阻止从一个域名向另一个域名发起的未经授权的请求。

同源策略

同源策略是一种重要的安全机制,它阻止了一个源(域名、协议和端口)下的文档或脚本从另一个源请求资源。这意味着,只有当请求的资源与当前文档的源相同时,浏览器才会允许请求通过。

跨域资源共享 (CORS)

跨域资源共享(CORS, Cross-Origin Resource Sharing)是由服务器来决定是否允许跨域请求的一种机制。服务器通过设置适当的响应头来告诉浏览器,哪些源可以访问其资源。最常见的响应头是 Access-Control-Allow-Origin

流程示意
  1. 浏览器发起请求:当浏览器检测到一个跨域请求时(如 AJAX 请求),它会首先发送一个预检请求(OPTIONS 请求)到服务器,询问服务器是否允许跨域请求。
  2. 服务器响应预检请求:服务器响应预检请求,并在响应头中包括 Access-Control-Allow-Origin 和其他 CORS 相关头部信息。
  3. 浏览器根据响应决定是否发出实际请求:如果服务器允许跨域请求,浏览器会继续发送实际的请求。如果服务器不允许,浏览器会阻止请求,并向客户端返回错误。
代码示例

在你的代码中,服务器通过设置响应头来允许跨域请求:

@RequestMapping("/index")
public String index(HttpServletResponse response) {response.addHeader("Access-Control-Allow-Origin", "*");return "index";
}

当浏览器接收到这个响应头时,它就知道可以接受该响应,即使请求来自于不同的源。

总结

防止跨域请求的主要措施是由浏览器实施的,同源策略确保了一个源无法未经授权访问另一个源的资源。服务器通过设置适当的 CORS 响应头,可以允许合法的跨域请求。


可是按下f12进行调试并没有看到有预检请求啊

并不是所有的跨域请求都会触发预检请求(OPTIONS 请求)。预检请求通常在以下情况中触发:

  1. 使用的 HTTP 方法不是 GET、POST 或 HEAD。
  2. 使用的自定义头部字段(如 X-Custom-Header)。
  3. 请求的内容类型(Content-Type)不是以下三种之一:
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

如果你的跨域请求是一个简单请求(Simple Request),那么它不会触发预检请求。简单请求包括以下几种情况:

  • 使用 GET、POST 或 HEAD 方法。
  • 不包含自定义头部。
  • 请求的内容类型是上述三种之一。
示例说明

假设你在使用 JavaScript 发起一个跨域请求:

fetch('http://example.com/index', {method: 'GET',headers: {'Content-Type': 'application/json'}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

这个请求是一个简单请求,不会触发预检请求。浏览器会直接发出 GET 请求,并根据服务器的响应头判断是否允许跨域。

如何查看请求头

在浏览器的开发者工具中,可以按以下步骤查看请求和响应头:

  1. F12 打开开发者工具。
  2. 转到“Network”(网络)选项卡。
  3. 发起跨域请求。
  4. 在请求列表中找到对应的请求,点击它。
  5. 在右侧面板中查看“Headers”(头部)信息,包括请求头和响应头。
检查预检请求

如果你希望确认是否有预检请求被发出,可以尝试以下方法:

  1. 修改请求方法为非简单请求方法(如 PUT、DELETE 等)。
  2. 添加自定义头部字段(如 X-Custom-Header)。
  3. 修改请求的 Content-Type 为非简单请求的类型(如 application/json)。

例如:

fetch('http://example.com/index', {method: 'POST',headers: {'Content-Type': 'application/json','X-Custom-Header': 'value'},body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

此时,浏览器应该会先发出一个预检请求(OPTIONS),你可以在开发者工具的网络选项卡中看到这个预检请求。


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

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

相关文章

自动批量将阿里云盘文件发布成WordPress文章脚本源码(以RiPro主题为例含付费信息下载地址SEO等自动设置)源码

背景 很多资源下载站,付费资源下载站,付费内容查看等都可以用WordPress站点发布内容,这些站点一般会基于一个主题,付费信息作为文章附属的信息发布,底层存储在WP表里,比如日主题,子比主题等。 …

Apache Seata tcc 模块源码分析

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 一 .导读 spring 模块分析中讲到,Seata 的 spring 模块会对涉及到分布式业务的 b…

《梦醒蝶飞:释放Excel函数与公式的力量》9.2 FV函数

9.2 FV函数 FV函数是Excel中用于计算投资或贷款在若干期后的未来值的函数。它是一个非常实用的财务函数,能够帮助我们快速计算投资的最终价值或贷款的期末余额。 9.2.1 函数简介 FV函数用于计算基于定期固定支付和固定利率的投资或贷款的未来值。未来值是指在一定…

cs224n作业3 代码及运行结果

代码里要求用pytorch1.0.0版本,其实不用也可以的。 【删掉run.py里的assert(torch.version “1.0.0”)即可】 代码里面也有提示让你实现什么,弄懂代码什么意思基本就可以了,看多了感觉大框架都大差不差。多看多练慢慢来,加油&am…

文件、文本阅读与重定向、路径与理解指令——linux指令学习(一)

前言:本节内容标题虽然为指令,但是并不只是讲指令, 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法, 很抱歉, 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的,…

PD虚拟机怎么联网?PD虚拟机安装Win11无法上网 pd虚拟机连不上网怎么解决 mac安装windows虚拟机教程

PD虚拟机既可以联网使用,也可以单机使用。如需将PD虚拟机联网,可以共享Mac原生系统的网络,其使用体验与真实系统无异。本文会详细讲解PD虚拟机如何联网,并会进一步解决PD虚拟机安装Win10无法上网的问题。 如果有网络相关问题的小伙…

游戏服务器搭建选VPS还是专用服务器?

游戏服务器搭建选VPS,VPS能够提供控制、性能和稳定性。它不仅仅是让游戏保持活力。它有助于减少延迟问题,增强您的游戏体验。 想象一下:你正沉浸在一场游戏中。 胜利在望。突然,屏幕卡住——服务器延迟。 很崩溃,对…

C语言实现【程序设计与实践】实验三:自动售货机

声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 附上c版http://t.csdnimg.cn/BbDSL https://blog.csdn.net/As_sBomb/article/details/105485940 实验三:自动售货机 题目: 图所示为简易自动售货…

【MYSQL】事务隔离级别以及InnerDB底层实现

事务隔离级别 读未提交(Read Uncommitted) 允许事务读取其他事务未提交的数据,可能会导致脏读。 读已提交(Read Committed) 一个事务只能看见已经提交的事务所做的更改,可以避免脏读,但可能…

win7系统快速安装python

下载安装包 建议选择python3.8左右的,我下载的是3.7.8,最新版本的pythonwin7可能不支持 python网址 下拉寻找 安装python 1.双击安装包 更换完地址选择安装(install) 安装完成后点击close即可 测试是否安装成功 1.winr快捷键打开黑窗口输入cmd …

idea创建的maven项目pom文件引入的坐标报红原因

如下所示 我们在引入某些依赖坐标的时候,即使点击了右上角的mavne刷新之后还是报红。 其实这是正常现象,实际上是我们的本地仓库当中没有这些依赖坐标,而idea就会通过报红来标记这些依赖来说明在我们的本地仓库是不存在的。 那有的同学就会…

【HICE】dns正向解析

1.编辑仓库 2.挂载 3.下载软件包 4.编辑named.conf 5.编辑named.haha 6.重启服务 7.验证本地域名是否解析

六、快速启动框架:SpringBoot3实战-个人版

六、快速启动框架:SpringBoot3实战 文章目录 六、快速启动框架:SpringBoot3实战一、SpringBoot3介绍1.1 SpringBoot3简介1.2 系统要求1.3 快速入门1.4 入门总结回顾复习 二、SpringBoot3配置文件2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文…

ODOO17的邮件机制-系统自动推送修改密码的邮件

用户收到被要求重置密码的邮件: 我们来分析一下ODOO此邮件的工作机制: 1、邮件模板定义 2、渲染模板的函数: 3、调用此函数的机制: 当用户移除或增加了信任的设备(如电脑、手机端等),系统会自…

CentOS 7.9 停止维护(2024-6-30)后可用在线yum源 —— 筑梦之路

众所周知,centos 7 在2024年6月30日,生命周期结束,官方不再进行支持维护,而很多环境一时之间无法完全更新替换操作系统,因此对于yum源还是需要的,特别是对于互联网环境来说,在线yum源使用方便很…

从0到1:培训老师预约小程序开发笔记二

背景调研 培训老师预约小程序: 教师和学生可以更便捷地安排课程,并提升教学质量和学习效果,使之成为管理和提升教学效果的强大工具。培训老师可以在小程序上设置自己的可预约时间,学员可以根据老师的日程安排选择合适的时间进行预…

记录第一次使用air热更新golang项目

下载 go install github.com/cosmtrek/airlatest 下载时提示: module declares its path as: github.com/air-verse/air but was required as: github.com/cosmtrek/air 此时,需要在go.mod中加上这么一句: replace github.com/cosmtrek/air &…

qt QGridLayout 简单实验1

1.概要 2.实验 2.1 实验1 简单实验跨行 2.1.1 代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~W…

STM32 - 内存分区与OTA

最近搞MCU&#xff0c;发现它与SOC之间存在诸多差异&#xff0c;不能沿用SOC上一些技术理论。本文以STM L4为例&#xff0c;总结了一些STM32 小白入门指南。 标题MCU没有DDR&#xff1f; 是的。MCU并没有DDR&#xff0c;而是让代码存储在nor flash上&#xff0c;临时变量和栈…

yolov5实例分割跑通以及C#读取yolov5_Seg实例分割转换onnx进行检测部署

一、首先需要训练yolov5_seg的模型&#xff0c;可以去网上学习&#xff0c;或者你直接用我的&#xff0c; 训练环境和yolov5—7.0的环境一样&#xff0c;你可以直接拷过来用。 yolov5_seg算法 链接&#xff1a;https://pan.baidu.com/s/1m-3lFWRHwg5t8MmIOKm4FA 提取码&…