React跨域请求,http-proxy-middleware代理服务,Axios实现前端请求

news2024/11/25 3:04:13

React + Axios跨域请求

React跨域

  • React + Axios跨域请求
  • 一、跨域概念
  • 二、前后端中跨域现象
  • 三、跨域解决方案(2种)
    • 0、产生原因
    • 1、前端解决(React框架)
      • 解决原理:
      • 配置过程
    • 2、后端解决(Spring-boot配置)
  • 结束

一、跨域概念

违背同源策略请求称为跨域请求
同源策略:IP、协议、端口相同的请求

二、前后端中跨域现象

此处展示前端请求后端非同一端口情况下

  • 1.网络栏出现CORS错误
    在这里插入图片描述
  • 2.可以发现跨域请求后端返回状态码是200,源地址为前端3000端口,主机地址为后端地址8080端口
    在这里插入图片描述
  • 3.控制台页面报错找不到后端返回的Access-Control-Allow-Origin选项信息
    在这里插入图片描述

三、跨域解决方案(2种)

0、产生原因

  • 由于浏览器不允许非同源地址访问,导致服务器响应数据到浏览器时会被拦截,故访问后端返回状态码正确但前端渲染接收数据异常。
前端:3000 后端:8080 HTTP请求 浏览器拦截 前端:3000 后端:8080

1、前端解决(React框架)

前端搭建代理服务器实现

前端:3000 代理服务器:3000/api 后端:8080 HTTP请求 HTTP请求 响应返回 响应结果并交由前端渲染 前端:3000 代理服务器:3000/api 后端:8080

解决原理:

  • 利用服务器访问后端时作为客户端进行访问不受限制
  • 前端访问与自己同源的服务器时也不受限制

配置过程

http-proxy-middleware文档
Axios文档

前期工具

npm i http-proxy-middleware
npm i axios

(1)、在React项目的src文件夹下创建文件setupProxy.js并填写如下内容(src/setupProxy.js)

const {createProxyMiddleware} = require("http-proxy-middleware");
module.exports = function (app){
    app.use("/api", // 由于请求前后端此时都为3000端口,由于区分请求后端的前缀
        createProxyMiddleware({
            target:"http://127.0.0.1:8080",// 后端服务器地址
            changeOrigin: true,
            pathRewrite: {
                "^/api": ""
            } // 重写地址,将附加的api前缀去除给到后端地址
        	// 若后端请求地址为 http://127.0.0.1:8080/myprocess/
        	// 此时请求代理服务器地址应为 http://127.0.0.1:8080/api/myprocess/
        	// 此处选项就是去除api/这个前缀的
        }))
};

(2)、前端axios请求后端服务器代码(可理解为将后端的8080服务代理到前端的3000/api接口上,故代理后要请求3000/api,不是8080/api等其他端口)

	// 前端服务器地址http://127.0.0.1:3000
	// 后端服务器地址http://127.0.0.1:8080
	// 请求后端http://127.0.0.1:8080/myprocess
	axios.get('http://127.0.0.1:3000/api/myprocess')

2、后端解决(Spring-boot配置)

增加 @CrossOrigin 注解实现

@CrossOrigin // 在Controller前加入注解使得返回相应加上"Access-Control-Allow-Origin": "*"允许跨域访问
@RestController
public class processController {
    @Autowired
    MyProcessServiceImpl processService;
    @GetMapping("/myprocess")
    private List<myStruct> getData(){
        //具体实现
        return ;
    }
}

结束

文中若有多点不足还请各位评论指出(方便及时更正避免误导更多人),使此文发挥实际作用,如在配置过程中根据此方法配置后仍无法解决可以私信或评论留言,我会第一时间查看并回复!!!

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

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

相关文章

可观测性神器之 Micrometer

简介 对于大部分开发人员来说可能用过普罗米修斯 Grafana 这样的监控系统&#xff0c;从未听说过 Micrometer 工具&#xff0c;这里就详细的来介绍下可观测性神器 Micrometer&#xff0c;让你在开发时使用它就和使用 SLFJ 日志系统一样简单易用&#xff0c;有效的提升系统的健…

使用DevExpress WPF主题设计器轻松创建Office 2019绿色主题(一)

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF的The…

使用JavaRestClient查询文档排序、分页、高亮

可以参考着“利用JavaRestClient实现文档的CRUD&#xff08;从mysql数据库转移到es&#xff09;”来看 http://t.csdn.cn/SP5nx 1、解析响应的方法 private void handleResponse(SearchResponse response) {// 4.解析响应SearchHits searchHits response.getHits();// 4.1.获取…

NPM相关

npm包管理工具,安装完node.js,就有npm相关 winR node -v 查看node版本 npm -v 查看npm版本 node.js与npm的关系,只能说node.js里内嵌了npm 功能相关 npm的一些命令 npm conf ls 和 npm config list 都是查看npm配置信息 没有区别 注意:如果你是在当前目录下,比如我这…

头部咨询管理企业的数字化转型之路

咨询管理行业前景与现状&#xff01; 5000字讲解3家头部咨询企业案例&#xff0c;希望能给大家在数字化方面带来一些启发。&#xff08;找客服&#xff0c;可获取咨询行业解决方案详细版&#xff09; 1、数字化转型同样是咨询行业的大命题 新冠疫情发生以来&#xff0c;各行…

Linux重定向原理与系统调用dup2

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、重定向原理①输出重定向②输入重定向二、重定向的系统调用dup2dup2输出重定向三、如何理解一切皆文件四.缓冲区①常见的缓冲区刷新策略②…

【数据结构与算法】B树与B+树

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;数据结构与算法 &#x1f320; 首发时间&#xff1a;2022年12月6日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e;…

电脑e盘不见了怎么恢复?6个步骤找回e盘

电脑e盘不见虽然不是一件常见的事&#xff0c;但是也会有发生的情况。虽然我们还有其他磁盘&#xff0c;平时也会经常忽略e盘。但是e盘也是一个存储磁盘&#xff0c;当电脑e盘不见了&#xff0c;我们也会想要找回来。那么电脑里的e盘丢失了怎么找回呢&#xff1f;下面我们就一起…

QListWidget::itemEntered无效

利用QListWidget进行数据列表的展示&#xff1b; &#xff08;1&#xff09;初始化一个QListWidget&#xff1a; QListWidget* newListWidget new QListWidget(parent); newListWidget->setResizeMode(QListView::Adjust); newListWidget->setViewMode(QListView::Icon…

论文浅尝 | AdaLoGN: 基于推理的机器阅读理解的自适应逻辑图网络

笔记整理&#xff1a;何仕玉珑&#xff0c;天津大学硕士链接&#xff1a;https://arxiv.org/pdf/2203.08992.pdf动机最近的机器阅读理解数据集(如ReClor和LogiQA)需要对文本执行逻辑推理。传统的神经模型不足以进行逻辑推理&#xff0c;而符号推理机不能直接应用于文本推理。为…

【Cross-Direction and Progressive Network:交叉的挖掘信息】

A Cross-Direction and Progressive Network for Pan-Sharpening &#xff08;一种交叉递进的泛锐化网络&#xff09; 本文提出了一种交叉方向渐进&#xff08;cross-direction and progressive&#xff09;网络CPNet来解决全色锐化问题。对信息的充分处理是我们模型的主要特…

实战三十一:基于LightGCN推荐算法的推荐系统详细教程(代码+数据)

推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)构造出用户-项目交互图,协同过滤利用过去的用户-项目交互来实现预测;对相似的用户进行推荐相同喜好的item,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的…

01-go基础-05-数组(声明数组、数组赋值、遍历数组、数组值修改)

文章目录1. 声明数组- 语法- 完整示例2. 数组赋值- 语法- 完整示例- 未赋值的元素仍为默认值3. 数组元素赋值- 语法- 示例4. 数组访问4.1 访问数组中元素4.2 遍历数组5. 数组的修改5.1 修改全部数组元素值5.2 修改单个元素值5.3 数组长度不可以更改1. 声明数组 - 语法 语法 …

刷爆力扣之1 比特与 2 比特字符

刷爆力扣之1 比特与 2 比特字符 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&am…

[附源码]Python计算机毕业设计Django四川景区管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Go语言的IO库那么多纠结该如何选择

在Go语言中I/O操作的内置库有很多种&#xff0c;比如:io库&#xff0c;os库&#xff0c;ioutil库&#xff0c;bytes库&#xff0c;strings库等等。 io.Reader/Writer Go语言里使用io.Reader和io.Writer两个 interface 来抽象I/O&#xff0c;他们的定义如下。 type Reader int…

数据图表软件-FineReport控件简介

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 应用场景 在帆软报表的具体应用中&#xff0c;经常使用「控件」来实现不同的功能。根据使用方式可将控件分为填报控件和参数控件两大类&#xff0c;填报时使用的控件为填报控件&#xff0c;参数界面使用的控件为参…

认证服务------遇到的问题及解决方案

认证服务的问题及解决方案 问题1&#xff1a;发送验证码 发送验证码要注意的问题 发送验证码要注意的两个问题 1、接口防刷 接口防刷就是因为发送验证码的api接口是可以通过查看页面元素看的到的 上面就可以看到发送验证码的js代码中的请求地址&#xff0c;可以恶意的通过…

【产品设计】APP提升用户注册率的五个方案探讨结论

首先介绍下前置条件&#xff0c;我们在做产品时&#xff0c;出于一开始对行业特征和用户参与度的考虑&#xff0c;所以对注册没有要求&#xff0c;当用户触发需要记录用户行为的功能时才会弹出登陆注册的聚合页面&#xff0c;能够触发弹出的功能有&#xff1a;赞、写点评、回复…

ActiveMQ 笔记(九)Windows部署:单机与集群部署流程

1. 单机版部署 版本关系说明:JDK8环境只能安装5.2及以下的。超过5.2需要JDK9及以上版本环境。 (1)官网下载安装包 activemq.apache.org 选择一个版本进行下载, (2)解压安装包 下载完成之后解压 下载后直接解压缩直接就能用(免安装)。 bin/是服务启动相关的命令文件…