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/test 的json数据,然后 axios 这边从 origin http://127.0.0.1:5500/web/html/test.html 向前者获取 json 数据并打印在 console 中。
运行之后发现出现如下错误:

bing 之后发现是跨域问题。
这里就不介绍跨域问题了,贴一个佬的讲解。你还不知道跨域问题是怎样造成的吗?
解决方法
反正就大概懂了这个请求我是发成功了,但是因为是 XHR 出现跨域问题 被拦截了,看了这个佬
—传送门— 的文章之后,知道了在 gin 中可以使用中间件来解决这个问题。我的解决步骤如下:
-
首先定义一个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()} } -
然后修改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)} } -
运行go程序并重新执行 html 代码

点击 GET 成功拿到数据
总结
在javaweb 用 go 语言也是逆天,但是还没有学 springboot 呜呜呜,springboot应该也可以实现类似的操作。总之就是 XHR 产生跨域问题 被目标地址 block了,我们在服务端对 origin 开放一下就可以了。
相关文章:
Gin 框架 解决 跨域问题
Gin 框架解决跨域问题 一点废话 在学习 Axios 的时候发现 up 使用了一个网址来提供 json 数据。因为不想加什么公众号搞啥百度网盘的,然后又刚好会一点点 go,就想着自己用 gin 框架返回一个 json 到前端页面然后从这个页面获取 json 。 这是我的go代码…...
【Datawhale课程笔记-简单学点大模型】大模型的能力
大模型的能力 参考GITHUB:https://github.com/datawhalechina/so-large-lm/blob/main/第二章:大模型的能力.md 深入探讨GPT-3——这个具有代表性的大型语言模型的能力。我们的研究主要基于GPT-3论文中的基准测试,这些测试包括: …...
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.下载网上开源版本库2.1.1.复制下载地址2.1.2.使用命令行…...
【PowerQuery】PowerBI Pro账户的自动刷新
在数据和模型通过发布或者上传方式上传到PowerBI Pro中,如何来进行数据刷新呢?数据源依然在本地,而数据模型已经发布到PowerBI Pro云端服务中。如果数据源更新,我们的模型如何进行自动刷新呢? PowerBI Pro如果需要基于本地数据源更新进行模型更新需要部署相应的数据网关服…...
红黑树(思维导图详解版)
目录 资源已上传 实现代码 测试代码 资源已上传 部分图片 实现代码 注意判断是否为红黑树的代码实现,实现代码中红黑树的删除 #pragma once #include<iostream> using namespace std;enum Color_Type {Red,Black };template<class K,class V> str…...
javafx学习记录
1.布局 2.选择重写或实现方法(select methods to override/implements) ctrl o 3.javafx有init方法,start方法,stop方法 4.定义一个按钮,使用系统默认浏览器访问网站 5.使窗口的关闭栏,缩小扩屏栏,代码是倒数第二行 6.设置模态窗口,默认关闭模态的 下…...
友善Nona Pi开发板ubuntu22.04系统用Python3.8.17的pip安装PyQt5.15.2时报错“Q_PID”这个宏未定义的一种解决办法
安装命令: pip install PyQt55.15.2 --config-settings --confirm-license --verbose -i https://mirrors.aliyun.com/pypi/simple/ 遇到出错: 如图: 分析具体错误内容: These bindings will be built: Qt, QtCore, QtNetwo…...
HTML中name和class,id的区别和联系
在HTML中,name、class和id是用于标识和选择元素的属性。 区别: name属性:用于标识表单元素,特别是在提交表单时,用于识别表单数据。name属性可以在同一表单中的多个元素中重复使用。class属性:用于为一个…...
Google 开源库Guava详解(集合工具类)—Maps、Multisets、Multimaps
一、Maps Maps有许多很酷的实用程序,值得单独解释。 1、uniqueIndex Maps.uniqueIndex(Iterable,Function)解决了一个常见的情况,即有一堆对象,每个对象都有一些唯一的属性,并希望能够根据该…...
肖sir__mysql之介绍__001
mysql之介绍 一、认识数据库 (1)什么是数据库? 是存放数据的电子仓库。以某种方式存储百万条,上亿条数据,供多个用户访问共享。 如: (2)数据库分关系型数据库和非关系型数据库 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…...
每日一题~中序后序遍历构造二叉树
原题链接:106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode) 题目描述: 思路分析: 后序遍历分析图 中序遍历分析图 不难看出后序遍历的结果中的最后一个元素就是根节点,倒数第二个元素则是根节点的…...
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题库 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。 小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。 小沐沐说,对于两个数列 A 和 B&…...
基于Java+SpringBoot+Vue+uniapp点餐小程序(包含协同过滤算法和会员系统,强烈推荐!)
校园点餐小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 系统功能结构设计4.2 主要功能描述 五…...
ActiveMQ面试题(二)
文章目录 前言一、死信队列二、ActiveMQ 中的消息重发时间间隔和重发次数吗?总结 前言 死信队列ActiveMQ 中的消息重发时间间隔和重发次数吗? 一、死信队列 如果你想在消息处理失败后,不被服务器删除,还能被其他消费者处理或重试…...
解决Oracle SQL语句性能问题——SQL语句改写(in、not in、exists及not exists)
8. in改为join in为Oracle数据库支持的条件语法,该语法会使得代码看起来思路清晰,逻辑分明。该语法有时也会导致SQL语句产生次优的执行计划,而导致SQL语句的性能问题。因此,为了解决相关SQL语句的性能问题,有时我们需要通过join来改写和消除in,具体改写方法如下所示。 …...
列表对象复制属性到另一个列表对象 从List<Object>另一个List<Object>
目录 事件起因环境和工具解决办法结束语 事件起因 在写一个市级的项目时,遇到了一个问题,这个项目涉及的数据内容非常大,光是数据库文件的大小就已经达到了12G,数据的规模大致是在百万级的,光是我这次参与处理的数据就…...
Python基本情况
Python(发音:/ˈpaɪθən/ )是一种强大的编程语言,它简单易学,提供众多高级的数据结构,让我们可以面向对象进行编程。Python 的语法优雅,由于是一个解释性语言,更贴近人类自然语言&…...
【精华】AI Agent:大模型改变世界的“钥匙”
文章目录 1.Auto-GPT2.BabyAGI3.AgentGPT4.GodMode5.AI Town6.ChatDev 当前大模型的本质是大语言模型(Large Language Model, LLM)。相较于传统的自然语言处理模型,LLM通过无监督训练,从大量文本数据中学习自然语言的模式和结构&a…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
