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

Gin 框架 解决 跨域问题

Gin 框架解决跨域问题

一点废话

在学习 Axios 的时候发现 up 使用了一个网址来提供 json 数据。因为不想加什么公众号搞啥百度网盘的,然后又刚好会一点点 go,就想着自己用 gin 框架返回一个 json 到前端页面然后从这个页面获取 json

这是我的go代码:

package mainimport ("github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/test", func(c *gin.Context) {c.JSON(200, gin.H{"id":    "1","name":  "feixin","major": "big data","old":   "20",})})err := r.Run()if err != nil {panic(err)}
}

初学者写的比较low,高手勿喷🥹🥹🥹
下面是我的 html 代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Ajax-Axios</title><script src="../js/axios.js"></script></head><body><input type="button" value="GET" onclick="get()"><input type="button" value="POST" onclick="post()">
</body>
<script>function get() {axios({method: "get",url: "http://localhost:8080/test"}).then((result) => {console.log(result.data);})}function post() {}
</script></html>

很简单的基本操作,go 这边实现了 http://localhost:8080/testjson数据,然后 axios 这边从 origin http://127.0.0.1:5500/web/html/test.html 向前者获取 json 数据并打印在 console 中。

运行之后发现出现如下错误:
在这里插入图片描述
bing 之后发现是跨域问题。

这里就不介绍跨域问题了,贴一个佬的讲解。你还不知道跨域问题是怎样造成的吗?


解决方法

反正就大概懂了这个请求我是发成功了,但是因为是 XHR 出现跨域问题 被拦截了,看了这个佬
—传送门— 的文章之后,知道了在 gin 中可以使用中间件来解决这个问题。我的解决步骤如下:

  1. 首先定义一个middlerwares包,新建 go file,任意取名。
    写入以下代码:

    package middlewaresimport ("github.com/gin-gonic/gin""net/http"
    )func Cors() gin.HandlerFunc {return func(c *gin.Context) {method := c.Request.Methodorigin := c.Request.Header.Get("Origin")if origin != "" {c.Header("Access-Control-Allow-Origin", "http://127.0.0.1:5500") // 写入origin的地址,例如我这边是这个c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type")c.Header("Access-Control-Allow-Credentials", "true")}if method == "OPTIONS" {c.AbortWithStatus(http.StatusNoContent)}c.Next()}
    }
  2. 然后修改go 代码为:

    package mainimport ("github.com/gin-gonic/gin"middlewares "test.com/helloworld/middlerwares" //多导了这个
    )func main() {r := gin.Default()r.Use(middlewares.Cors()) // 多加了这一句r.GET("/test", func(c *gin.Context) {c.JSON(200, gin.H{"id":    "1","name":  "feixin","major": "big data","old":   "20",})})err := r.Run()if err != nil {panic(err)}
    }
  3. 运行go程序并重新执行 html 代码
    在这里插入图片描述
    点击 GET 成功拿到数据


总结

在javaweb 用 go 语言也是逆天,但是还没有学 springboot 呜呜呜,springboot应该也可以实现类似的操作。总之就是 XHR 产生跨域问题 被目标地址 block了,我们在服务端对 origin 开放一下就可以了。

相关文章:

Gin 框架 解决 跨域问题

Gin 框架解决跨域问题 一点废话 在学习 Axios 的时候发现 up 使用了一个网址来提供 json 数据。因为不想加什么公众号搞啥百度网盘的&#xff0c;然后又刚好会一点点 go&#xff0c;就想着自己用 gin 框架返回一个 json 到前端页面然后从这个页面获取 json 。 这是我的go代码…...

【Datawhale课程笔记-简单学点大模型】大模型的能力

大模型的能力 参考GITHUB&#xff1a;https://github.com/datawhalechina/so-large-lm/blob/main/第二章&#xff1a;大模型的能力.md 深入探讨GPT-3——这个具有代表性的大型语言模型的能力。我们的研究主要基于GPT-3论文中的基准测试&#xff0c;这些测试包括&#xff1a; …...

git使用说明

目录 前言1.安装1.1. windows1.1.1.git客户端1.1.2.配置git客户端1.1.3.安装TortoiseGit图形客户端1.1.4 关于文件换行问题 1.2.ubuntu1.2.1.ubuntu终端Git中文乱码1.2.2 git log中文乱码解决 2.建立版本库2.1&#xff0e;下载网上开源版本库2.1.1.复制下载地址2.1.2.使用命令行…...

【PowerQuery】PowerBI Pro账户的自动刷新

在数据和模型通过发布或者上传方式上传到PowerBI Pro中,如何来进行数据刷新呢?数据源依然在本地,而数据模型已经发布到PowerBI Pro云端服务中。如果数据源更新,我们的模型如何进行自动刷新呢? PowerBI Pro如果需要基于本地数据源更新进行模型更新需要部署相应的数据网关服…...

红黑树(思维导图详解版)

目录 资源已上传 实现代码 测试代码 资源已上传 部分图片 实现代码 注意判断是否为红黑树的代码实现&#xff0c;实现代码中红黑树的删除 #pragma once #include<iostream> using namespace std;enum Color_Type {Red,Black };template<class K,class V> str…...

javafx学习记录

1.布局 2.选择重写或实现方法&#xff08;select methods to override/implements&#xff09; ctrl o 3.javafx有init方法,start方法,stop方法 4.定义一个按钮,使用系统默认浏览器访问网站 5.使窗口的关闭栏,缩小扩屏栏,代码是倒数第二行 6.设置模态窗口,默认关闭模态的 下…...

友善Nona Pi开发板ubuntu22.04系统用Python3.8.17的pip安装PyQt5.15.2时报错“Q_PID”这个宏未定义的一种解决办法

安装命令&#xff1a; pip install PyQt55.15.2 --config-settings --confirm-license --verbose -i https://mirrors.aliyun.com/pypi/simple/ 遇到出错&#xff1a; 如图&#xff1a; 分析具体错误内容&#xff1a; These bindings will be built: Qt, QtCore, QtNetwo…...

HTML中name和class,id的区别和联系

在HTML中&#xff0c;name、class和id是用于标识和选择元素的属性。 区别&#xff1a; name属性&#xff1a;用于标识表单元素&#xff0c;特别是在提交表单时&#xff0c;用于识别表单数据。name属性可以在同一表单中的多个元素中重复使用。class属性&#xff1a;用于为一个…...

Google 开源库Guava详解(集合工具类)—Maps、Multisets、Multimaps

一、Maps Maps有许多很酷的实用程序&#xff0c;值得单独解释。 1、uniqueIndex Maps.uniqueIndex&#xff08;Iterable&#xff0c;Function&#xff09;解决了一个常见的情况&#xff0c;即有一堆对象&#xff0c;每个对象都有一些唯一的属性&#xff0c;并希望能够根据该…...

肖sir__mysql之介绍__001

mysql之介绍 一、认识数据库 &#xff08;1&#xff09;什么是数据库&#xff1f; 是存放数据的电子仓库。以某种方式存储百万条&#xff0c;上亿条数据&#xff0c;供多个用户访问共享。 如&#xff1a; &#xff08;2&#xff09;数据库分关系型数据库和非关系型数据库 a、…...

【实战项目开发技术分享】如何设置机器人禁行区/虚拟墙

文章目录 前言一、代价地图自定义图层1.1 Costmap组成1.2 costmap_2d1.3 实现过程1.3.1 安装插件1.3.2 在costmap_2d中插入障碍物1.3.3 修改launch文件1.3.4 设置障碍物坐标参数二、图像编辑器2.1 安装GIMP2.1.1 命令行方式安装2.1.2 使用图形界面安装GIMP:2.2 实现过程三、ro…...

每日一题~中序后序遍历构造二叉树

原题链接&#xff1a;106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路分析&#xff1a; 后序遍历分析图 中序遍历分析图 不难看出后序遍历的结果中的最后一个元素就是根节点&#xff0c;倒数第二个元素则是根节点的…...

Sentinel整合Gateway

pom引入依赖<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>…...

线性dp,优化,272. 最长公共上升子序列

272. 最长公共上升子序列 - AcWing题库 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。 小沐沐先让奶牛研究了最长上升子序列&#xff0c;再让他们研究了最长公共子序列&#xff0c;现在又让他们研究最长公共上升子序列了。 小沐沐说&#xff0c;对于两个数列 A 和 B&…...

基于Java+SpringBoot+Vue+uniapp点餐小程序(包含协同过滤算法和会员系统,强烈推荐!)

校园点餐小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 系统功能结构设计4.2 主要功能描述 五…...

ActiveMQ面试题(二)

文章目录 前言一、死信队列二、ActiveMQ 中的消息重发时间间隔和重发次数吗&#xff1f;总结 前言 死信队列ActiveMQ 中的消息重发时间间隔和重发次数吗&#xff1f; 一、死信队列 如果你想在消息处理失败后&#xff0c;不被服务器删除&#xff0c;还能被其他消费者处理或重试…...

解决Oracle SQL语句性能问题——SQL语句改写(in、not in、exists及not exists)

8. in改为join in为Oracle数据库支持的条件语法,该语法会使得代码看起来思路清晰,逻辑分明。该语法有时也会导致SQL语句产生次优的执行计划,而导致SQL语句的性能问题。因此,为了解决相关SQL语句的性能问题,有时我们需要通过join来改写和消除in,具体改写方法如下所示。 …...

列表对象复制属性到另一个列表对象 从List<Object>另一个List<Object>

目录 事件起因环境和工具解决办法结束语 事件起因 在写一个市级的项目时&#xff0c;遇到了一个问题&#xff0c;这个项目涉及的数据内容非常大&#xff0c;光是数据库文件的大小就已经达到了12G&#xff0c;数据的规模大致是在百万级的&#xff0c;光是我这次参与处理的数据就…...

Python基本情况

Python&#xff08;发音&#xff1a;/ˈpaɪθən/ &#xff09;是一种强大的编程语言&#xff0c;它简单易学&#xff0c;提供众多高级的数据结构&#xff0c;让我们可以面向对象进行编程。Python 的语法优雅&#xff0c;由于是一个解释性语言&#xff0c;更贴近人类自然语言&…...

【精华】AI Agent:大模型改变世界的“钥匙”

文章目录 1.Auto-GPT2.BabyAGI3.AgentGPT4.GodMode5.AI Town6.ChatDev 当前大模型的本质是大语言模型&#xff08;Large Language Model, LLM&#xff09;。相较于传统的自然语言处理模型&#xff0c;LLM通过无监督训练&#xff0c;从大量文本数据中学习自然语言的模式和结构&a…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...