前端跨域问题的解决办法,两种类型

跨域问题是由于同源策略的原因,在协议(HTTP或HTTPS)不同、端口号(8080或8881)不同、主机IP(182.92.178.25或者182.92.178.26)不同时而导致的不能进行数据交换的问题。

当后端没有做跨域时,前端就需要自己配置。

类型一:使用代理服务器的方法:

原理:本机直接向服务器发起请求,服务器发现本机的协议、端口号或主机IP与自己不同,为了安全起见不会将数据响应出去,此时本机创建一个代理服务器,代理服务器在接收本机请求时是不会排斥的,收到请求之后会将请求转发给服务器,而此时代理服务器的协议、端口号或主机IP是自己设置的,也就是与服务器的相同。

方法一:在package.json中最外面的大括号里添加一条属性“proxy”,值为需要转发的协议+IP+端口。

例如:本地为http://localhost:8080,请求的数据在http://182.92.178.25:8880,那么在原来的位置还写成http://localhost:8080,在proxy后面写http://182.92.178.25:8880即可。

该方法优点是方便配置,缺点是只能配置一条转发,不适用于向多个服务器请求数据。

方法二:在src同级(也好像是src子级)下创建名为setupProxy.js的文件,在里面粘贴如下内容:

const proxy=require('http-proxy-middleware')

module.exprot=function(app){
    app.use(
        proxy("api1",{//遇见api1前缀的请求就会触发该代理配置,必须放在端口号后面第一位
            target:"http://localhost:5000",//将带有api1的请求转发到的路径
            changeOrigin:true,//控制服务器收到的响应头中Host字段的值,Host字段标识请求从哪发出的。没太大影响,但最好加上。
            pathRewrite:{'^/api1':''}//重写请求路径,将路径中的api1给清除
        }),
        proxy("api2",{//可以配置多个代理,
            target:"http://localhost:5001",
            changeOrigin:true,
            pathRewrite:{'^/api2':''}
        })
    )
}

该方法缺点是配置较为麻烦,但优点是可以配置多重代理,可以转发任意数量的服务器。

方法三:在 根目录/config/config.js中写上如下配置:

proxy: {
  '/api': {//遇见api前缀就会触发该代理
    target: 'http://8.141.88.60:8000',//要转发的代理
    changeOrigin: true,//控制服务器收到的响应头中Host字段的值,Host字段标识请求从哪发出的。
  },
},

该方法是方法一和方法二的综合体,配置简单,并且可以配置多条代理。

类型二:nginx反向代理

如果是前端同学自己部署前端项目,并且服务器与后端不同时会用到这种方法,因为当项目上线之后,就不会走原来代码中配置的代理,所以,就需要使用nginx进行反向代理。前端同学想要学习部署项目的话可以看:阿里云+Xshell部署前端项目,从准备工作到部署成功,亲测详解,小白友好型_阿里云服务器部署前端代码-CSDN博客

 下方为整个nginx配置,反向代理部分已经标注出来,需要复制粘贴的话可以将文字部分删除。

server {
    listen       8880;
    server_name     localhost;

    location / {
        root /web/html1/dist;
        try_files $uri $uri/ /index.html;
        index index.htm index.html;
    }
    #这一块就是反向代理的操作,可以看出来这和使用代理服务器还是很像的
    location /api {#在路径中遇到api时进行转发
        proxy_pass http://8.141.88.60:8000;#转发路径
    }

    error_page 404 /404.html;

    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

注意:同一种方法不一定适合所有情况,这边只提供了三种我遇到过的情况,同学们可以逐个尝试一下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb06-Jsp技术

Jsp技术 一.Jsp的运行原理 **概述:**JSP是Java服务器页面,既可以写静态页面代码,也可以写动态页面代码 **特点:**跨平台性,业务代码相分离,组件重用,预编译 运行原理: 客户端发生…

ssldump一键分析网络流量(KALI工具系列二十二)

目录 1、KALI LINUX 简介 2、ssldump工具简介 3、在KALI中使用ssldump 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 监听指定网卡 4.2 指定端口 4.3 特定主机 4.4 解码文件 4.5 显示对话摘要 4.6 显示加密数据(需要私钥&…

知识普及:什么是边缘计算(Edge Computing)?

边缘计算是一种分布式计算架构,它将数据处理、存储和服务功能移近数据产生的边缘位置,即接近数据源和用户的位置,而不是依赖中心化的数据中心或云计算平台。边缘计算的核心思想是在靠近终端设备的位置进行数据处理,以降低延迟、减…

Python开发者的7个PyCharm必备插件

大家好,本文将推荐使用7个必备的PyCharm IDE设置和插件,希望能帮助了解如何修改和增强IDE体验,使其更适合个人使用,毕竟作为开发者,大部分时间都是在这里工作。 1.String Manipulation 【链接】:https://…

c语言——扫雷游戏(简易版)

目录 前言游戏设计 前言 什么是扫雷游戏? 游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。 这个游戏对于c语言的初学者来说难度还是挺大的,那我就实现一个初学者也能快速学…

Android Media Framework(六)插件式编程与OMXStore

OpenMAX IL Spec阅读到上一节就结束了,这一节开始正式进入到Framework阅读阶段,我们将了解OpenMAX框架是如何与Android Framework连接的。 1、插件式编程 插件式编程(Plugin-based Programming)是一种软件开发模式,它…

JavaFX 概述

要从 JavaFX 中充分受益,了解 JavaFX 的设计方式以及对 JavaFX 包含的功能有一个很好的概述是很有用的。本文的目的是为您提供 JavaFX 概述。本文将首先介绍一般的 JavaFX 设计,然后介绍 JavaFX 中的各种特性。 如果您熟悉 Flash/Flex,您会发…

【后端】websocket学习笔记

文章目录 1. 消息推送常见方式1.1 轮询 VS 长轮询1.2 SSE(server-sent event)服务器发送事件 2. websocket介绍2.1 介绍2.2 原理2.3 websoket API2.3.1 客户端【浏览器】API2.3.2 服务端API 3. 代码实现3.1 流程分析3.2 pom依赖3.3 配置类3.4 消息格式3.5 消息类 参…

【Css】纯css展开、收起超出的文本

效果 展开 收起 未超出 码 -webkit-line-clamp: 3; 设置限制行数 <div class"wrap"> <inputtype"checkbox"id"exp-txt"><div class"text"><labelfor"exp-txt"class"btn"></label&g…

纷享销客常见问题FAQ

运维和安全职责边界 应用专属是部署在客户私有云或者客户公有云租户的IT环境中的&#xff0c;由纷享销客与客户共同维护系统的稳定性。一般来说客户主要负责维护IT基础环境和账号权限的管理而纷享销客则负责在客户环境中进行应用系统的部署、优化和日常运维工作。在安全方面&am…

OrangePi AIpro 机器人仿真与人工智能应用测评

系列文章目录 前言 本篇文章分为2个部分&#xff0c;第一部分主要搭建了机器人的仿真环境&#xff08;ROS2 MuJoCo等&#xff09;&#xff0c;运行了机械臂及移动机器人相关示例程序&#xff1b;第二部分运行了OrangePi AIpro系统自带的示例程序及昇腾社区官方的示例程序&#…

马克·雷伯特访谈:机器人的未来及波士顿动力的创新之路

引言 机器人技术作为现代科技的前沿领域&#xff0c;始终吸引着大量的关注与研究。波士顿动力公司作为这一领域的领军者&#xff0c;其创始人兼前CEO马克雷伯特&#xff08;Marc Raibert&#xff09;近日在主持人莱克斯弗里德曼&#xff08;Lex Fridman&#xff09;的播客节目…

机器学习笔记 - 用于3D点云数据分割的Point Net的训练

一、数据集简述 ​在本教程中,我们将学习如何在斯坦福 3D 室内场景数据集 ( S3DIS )上训练 Point Net 进行语义分割。S3DIS 是一个 3D 数据集,包含来自多栋建筑的室内空间点云,占地面积超过 6000 平方米。Point Net使用整个点云,能够执行分类和分割任务。如果你一直在关注 …

【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;动态规划 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/merge-sorted-array/description/ 本道题是归并排序的…

SNAT和DNAT策略

1、SNAT策略及应用 SNAT应用环境&#xff1a;局域网主机共享单个公网IP地址接入Internet&#xff08;私有不能在Internet中被正常路由&#xff09; SNAT原理&#xff1a; 修改数据包的源地址。 SNAT转换前提条件&#xff1a; 局域网各主机已正确设置IP地址、子网掩码、默认…

库的制作 与 使用 (Linux下)

目录 动静态库的制作 前置知识 库的基本构造 问题 分析 要给什么文件 如何更好的让别人使用 库的生成 静态库的生成 makefile参考 动态库的生成 makefile参考&#xff08;包含动态库和静态库生成&#xff09; 库的使用 法一&#xff1a;放入系统路径 弊端 法二…

Android开发系列:高性能视图组件Surfaceview

一、Surfaceview概述 在Android应用开发领域&#xff0c;面对视频播放、游戏构建及相机实时预览等高性能需求场景&#xff0c;直接操控图像数据并即时展示于屏幕成为必要条件。传统View组件在此类情境下显现局限性&#xff1a; 性能瓶颈&#xff1a;传统View的绘制任务由UI主…

如何充分利用 Postgres 的内存设置

为了充分利用 PostgreSQL 的内存设置&#xff0c;你需要调整多个参数以优化数据库性能。这些参数包括共享缓冲区&#xff08;shared_buffers&#xff09;、工作内存&#xff08;work_mem&#xff09;、维护工作内存&#xff08;maintenance_work_mem&#xff09;、有效缓存大小…

命令词:引导行动的语言工具

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

《全职猎人》

《全职猎人》 [1-2]是日本漫画家富坚义博的作品。 1999年版改编电视动画由日本动画公司负责动画制作&#xff0c;于1999年10月16日&#xff0d;2001年3月30日在富士电视台播出&#xff0c;该动画的故事至贪婪之岛篇章结束&#xff0c;全92话。 该作在富坚义博老师天马行空的想…