跨域问题的解决

WEB前端10- Fetch API(同步/异步/跨域处理) 具体来说,同源策略要求网页中的所有资源(如脚本、样式表和 AJAX 请求)必须来自同一个域、协议和端口,否则就会出现跨域问题。代理服务器充当客户端和目标服务器之间的中介,它接收来自客户端的请求,然后将请求转发给目标服务器,并将目标服务器的响应返回给客户端。Promise 对象是 JavaScript 中处理异步操作的一种机制,它代表了一个异步操作的最终完成或失败,并且其结果值是可用的。: (可选)一个对象,包含配置 fetch 操作的设置,比如方法、头部、请求体、凭据等。这个参数允许精确调整请求的细节。 阅读详情

跨域问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dATiYxVm-1663952263337)(D:\2022.js\imgs\image-20220814105448882.png)]

  • 只要协议、主机、端口之一不同,就不同源,例如
    • http://localhost:7070/a 和 https://localhost:7070/b 就不同源
  • 同源检查是浏览器的行为,而且只针对 fetch、xhr 请求
    • 如果是其它客户端,例如 java http client,postman,它们是不做同源检查的
    • 通过表单提交、浏览器直接输入 url 地址这些方式发送的请求,也不会做同源检查
  • 更多相关知识请参考

请求响应头解决

请添加图片描述

  • fetch 请求跨域,会携带一个 Origin 头,代表发请求的资源源自何处,目标通过它就能辨别是否发生跨域
    • 我们的例子中:student.html 发送 fetch 请求,告诉 tomcat,我源自 localhost:7070
  • 目标资源通过返回 Access-Control-Allow-Origin 头,告诉浏览器允许哪些源使用此响应
    • 我们的例子中:tomcat 返回 fetch 响应,告诉浏览器,这个响应允许源自 localhost:7070 的资源使用
      实现方式:

第一种加入@CrossOrigin(http://localhost:7070)注解

@Controller
//@CrossOrigin
public class CrossOriginController {
    @RequestMapping("/api/students")
    @ResponseBody
    @CrossOrigin("http://localhost:7070")
    public List<Student> testCrossOrigin(){
    }
}

第二种设置配置类

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许跨域访问的路径
                .allowedOriginPatterns("*") // 允许跨域访问的源
                .allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS") // 允许请求方法
                .maxAge(168000) // 预检时间间隔
                .allowedHeaders("*") // 允许头部设置
                .allowCredentials(true); // 是否发送cookie
    }
}

第三种 如果请求未通过过滤器,拦截器就被响应了,是跨域配置类是不会生效的,需要通过过滤器实现

@Configuration
public class CorsFilterConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowedOriginPatterns(Arrays.asList("*"));
        config.setAllowCredentials(true);
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        config.addExposedHeader("*");
        config.setMaxAge(168000L);

        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        return new CorsFilter(configSource);
    }
}

代理解决

在这里插入图片描述

1、在终端中下载插件

npm install http-proxy-middleware --save-dev

2、在 express 服务器启动代码中加入

import {createProxyMiddleware} from 'http-proxy-middleware'

// ...
																											
												//'http://localhost:8080/项目名'
app.use('/api', createProxyMiddleware({ target: 'http://localhost:8080', changeOrigin: true }));

3、fetch 代码改为

const resp = await fetch('http://localhost:7070/api/students')

或

const resp = await fetch('/api/students')
Fetch表单提交和跨域请求 表单提交和跨域请求1.跨域2.fetch请求 1.跨域 全称是"跨域资源共享"(Cross-origin resource sharing) 解决跨域基本就是后端添加 Response Header import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowir 阅读详情

相关推荐

第3章、Fetch网络请求

在进行跨域请求时,fetch api 提供了一种简单而强大的解决方案:使用 cors(跨域资源共享)头部实现跨域请求;该协议使用 http 请求和响应进行通信,与传统的 ajax 方式相比,fetch 更加简单易用;三、React Fetch 配置 package 文件解决跨域问题;fetch 是一种网络通信协议,用于在客户端和服务器之间传输数据;fetch api 默认只支持 get 和 post 请求方法;四、React Fetch 手动配置跨域;五、React Fetch 封装网络请求;

weixin_44121341的博客 626

Fetch 跨域

问题: fetch('http://localhost:3000/myWebSite/praise', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSO...

显磊的博客 2万+

在thinkBook16的win11基础上安装ubuntu22.04

背景:联想ThinkBook16 pro 32G/512G,系统盘已安装Win11,加装一条M.2-2T固态,想在2T上分一个300GB的EXT4分区,然后把ubuntu22.04安装在该分区上,并实现Win11+Linux多系统共存。 目标:实现多磁盘下分区管理的简化,优化掉一些不必要的多余的维护性质的分区。

QzmAIoT 4003

Fetch请求的跨域处理

Ajax和Fetch请求的跨域处理      浏览器安全的基石是"同源政策"(same-origin policy),这里的三源是指协议,端口和域名。同源政策是为了保护用户的安全,如下将介绍,跨域的解决办法。 一. Jsonp 由于这种方式只支持get方法的跨域,本身具有一定的局限性,因此在这里不详细的介绍。 二. Nginx反向代理 如今项目多采...

qq_36400206的博客 9999

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 398

微生物16S数据上传NCBI的SRA库

本篇内容仅包括:俺自己的实验收集了淡水、淡水沉积物、海水、海草附着微生物样品,测序所得的Fastq格式数据,在文章投稿发表时被要求数据需上传NCBI的SRA库,得到一个PRJNA2347899这样子的IDs。仅解决了这个上传过程!

Xf_Niu的博客 7435

什么是跨域?怎么解决跨域问题?

什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域) http://www.123.com/index.html 调用 http://www...

空夜's Blog 7717

Curve+ 5.0.2:新一代色彩校准工具如何革新印刷行业标准

Curve+ 5.0.2作为新一代色彩校准工具,通过G7+校准算法和SCTV技术革新了印刷行业的色彩管理标准。该工具显著提升色彩精准度,减少打样时间和材料浪费,支持专色处理,实现跨材质色彩一致性,为印刷企业带来效率与质量的全面提升。

weixin_29228781的博客 529

nginx解决跨域问题

在我们前端开发的过程中, 相信大家都遇到过一个让人头疼的问题,那就是跨域问题. 跨域解决的方式有很多,这里主要讲的是如何来使用 nginx来解决我们所遇到的跨域问题 首先,在我们开始之前,首先要知道跨域是如何产生的: 协议 ip 端口号 这三者有任何一个不同,就会产生跨域问题 了解了跨域的产生,接着我们就来看看,如何解决它 一.下载nginx 下载地址: http://ngin...

rolinabc的博客 1万+

OpenStack 8 节点生产级高可用(HA)集群实施文档

本文详细介绍了生产级高可用OpenStack集群的架构设计与实施方案。通过采用3节点控制集群(HAProxy+Keepalived)、2节点计算资源池和3节点Ceph分布式存储,实现了控制平面、计算资源和存储系统三个层面的高可用。方案重点阐述了VIP漂移、MariaDB Galera集群、RabbitMQ镜像队列等关键组件的配置方法,并提供了完整的部署流程和故障验证方案。该架构确保任意单节点故障不会影响平台整体可用性,满足生产环境对稳定性、扩展性和可维护性的要求,为构建无单点故障的OpenStack生产环境

彭大帅的博客 781

LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析

变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。

weixin_43199439的博客 279

什么时跨域问题和如何解决跨域问题

跨域问题指的是不同站点之间,使用ajax无法互相调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站盗取数据。但是这个保护机制也带来了新的问题,它的问题是给不同站点之间的正常调用的正常调用,也带来了阻碍,那么如何解决这三种问题呢?

loss_rose777的博客 1万+

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

什么是跨域?跨域问题怎么解决?

目录 一、什么是跨域? 二、为什么会出现跨域问题? 三、常见的跨域场景 四、跨域解决方法 1、JSONP (1)JSONP原理 (2)JSONP和AJAX对比 (3)JSONP优缺点 (4)JSONP的流程(以第三方API地址为例,不必考虑后台程序) (5)jQuery的jsonp形式 2、CORS (1)CORS原理 (2)CORS优缺点 (3)用法 3、WebSo...

weixin_43240792的博客 8037

LangGraph 实战教程:搭建一个智能办公多Agent协作平台

只存储必要的信息:不要把所有的原始数据都存储在状态中,比如销售数据可以存储在数据库或向量数据库中,状态中只存储数据的 ID 或摘要。使用类型提示:避免类型错误,提高代码的可维护性。支持增量更新:LangGraph 默认支持状态的增量更新(通过reduce函数),比如messages列表可以通过追加新消息的方式更新,而不是每次都重新创建整个列表。Normal Edge 的定义非常简单,只需要在StateGraph对象(稍后会详细讲解)上调用add_edge# 创建一个 StateGraph 对象。

SuperAGI2025 221

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

什么是跨域,如何解决跨域问题

跨域问题产生的根本原因是浏览器的同源策略(Same-Origin Policy)。同源策略是浏览器实现的一种安全协议,它限制了一个源的文档或脚本如何与另一个源的资源进行交互。如果没有同源策略,恶意网页可能会读取另一个网页的敏感信息,如用户输入的密码、银行账号等,从而进行非法操作。

weixin_55862073的博客 5881

Statistics and Machine Learning Toolbox

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

Nginx完美解决跨域问题

1、跨域问题存在情况: 当我们当前的域名与请求接口的域名不在同一个域名下时,在浏览器Console下会看到,跨域的错误提示,下面举一个例子来说明: 1)前提条件: i、当前域名http://kuayu.com ii、请求接口域名:http://csdn.b.com/cat 当在前端页面通过ajax请求接口域名的数据时,会报跨域错误 2、解决跨域方法 解决跨域有多种方式,如果请求的接口...

哆啦A梦 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Nginx — 跨域问题演示以及解决方法

同源是指两个 URL 的协议、域名、端口号都相同。因为它们都使用 HTTP 协议,域名都是,且端口号都采用了 HTTP 协议的默认端口号 80(在 URL 中未显式指定时默认使用 80 端口)。:协议为 HTTPS,与前面的 HTTP 协议不同。:域名是,与不同。:指定了端口号 8080,与默认的 80 端口不同。同源策略是浏览器安全的基石,它限制了不同源的文档或脚本之间的交互,防止恶意网站通过脚本访问其他网站的敏感信息,从而保护用户的隐私和数据安全。

dghfttgv的博客 5148

什么是跨域问题以及其解决方案

在前端领域中,跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能同源使用的限制。同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

dd的博客 864

关于跨域后端解决跨域问题

关于跨域的理解,后端如何解决遇到的跨域问题

ls18802694089的博客 6207

zuul的跨域问题及解决

前言:涉及到跨域问题,我们首先想到的是在贝雕用的类或方法上增加@CrossOrign注解,这节我们主要讲解在zuul里增加CorsFilter过滤器。 在api-gateway服务中新建一个CorsConfig类,代码如下 import org.springframework.context.annotation.Bean; import org.springframework.context.a...

angel_jobs的博客 2956

跨域及解决跨域问题的详细解释

跨域是一个浏览器安全策略,用于防止恶意网站通过 JavaScript 代码访问来自其他网站的资源。同源策略要求网页只能访问与其来源相同的资源,即具有相同的协议(如http或https)、域名和端口号。例如,假设你的网站位于https://www.example.com,如果你在 JavaScript 中尝试通过XMLHttpRequest请求 https://www.google.com 的数据,这就是一个跨域请求,因为域名不同。跨域请求默认会被浏览器阻止,因为这可能会导致安全问题。

m0_67880202的博客 1319

快速带你理解什么是跨域并解决跨域问题

1、什么是跨域? 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 2、为什么会有跨域? 在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。在请求的过程中我们要想回去数据一般都是post/get请求,所以…跨域问题出现 跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本

qq_42846807的博客 4644

跨域问题的产生及解决

跨域问题的产生及解决 开发过程中,或多或少都碰见过这样的情况,本地写了个ajax请求想从某某域下获取数据,代码如下: $.ajax({ url:"https://www.baidu.com", data:{ name:"name", address:"beijing" }, type:"post", ...

JiangLittleBai的博客 1850

如何解决ajax跨域问题

如何解决ajax跨域问题(转) 由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题。本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax 跨域问题的全过程。 不知是跨域问题 起 因是这样的,为了...

anyi5187的博客 111
上一篇: 前端Fetch API接收数据
下一篇: Vue 2 环境准备
稚淮粥
博客等级 码龄6年 11粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值