当前位置: 首页 > 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…...

CVPR2023 RIFormer, 无需TokenMixer也能达成SOTA性能的极简ViT架构

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/l3US8Dsd0yNC19o7B1ZBgw project, paper, code Token Mixer是ViT骨干非常重要的组成成分&#xff0c;它用于对不同空域位置信息进行自适应聚合&#xff0c;但常规的自注意力往往存在高计算复杂度与高延迟问题。…...

瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

瑞萨MCU零基础入门系列教程 前言 得益于瑞萨强大的MCU、强大的软件开发工具(e studio)&#xff0c;也得益于瑞萨和RA生态工作室提供的支持&#xff0c;我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》&#xff0c;全书37章&#xff0c;将近500页: 讲解面向对象编程…...

【Java】采用 Tabula 技术对 PDF 文件内表格进行数据提取

某天项目组来了个需求说需要提取 PDF 文件中数据作为数据沉淀使用&#xff0c;这是因为第三方系统不提供数据接口所以只能够出此下策。 就据我所知&#xff0c;PDF 文件内数据提取目前有 3 种解决方案&#xff1a; 第一种&#xff0c;资金足够的话可以直接通过人工智能对 PDF…...

完全保密的以太坊交易:Aztec网络的隐私架构

1. 引言 Aztec为隐私优先的以太坊zkRollup&#xff1a;即其为具有完全隐私保护的L2。 为了理解私有交易的范式变化性质&#xff0c;以及为什么将隐私直接构建到网络架构中很重要&#xff0c;必须首先讨论为什么以太坊不是私有的。 2. 以太坊&#xff1a;公有链 以太坊为具有…...

初识Java 9-1 内部类

目录 创建内部类 到外部类的链接 使用.this和.new 内部类和向上转型 在方法和作用域中的内部类 匿名内部类 嵌套类 接口中的类 从多嵌套的内部类中访问外部人员 本笔记参考自&#xff1a; 《On Java 中文版》 定义在另一个类中的类称为内部类。利用内部类&#xff0c;…...

合宙Air724UG LuatOS-Air LVGL API控件-屏幕横屏竖屏切换(Rotation)

屏幕横屏竖屏切换(Rotation) lvgl.disp_set_rotation(nil, lvgl.DISP_ROT_angle) 屏幕横屏竖屏切换显示&#xff0c;core版本号要>3202参数 参数类型释义取值nil无意义nilangle显示角度0,90,270,360 返回值nil 例子 lvgl.init()- -初始化 lvgl.disp_set_rotation(nil,…...

在Unity中,Instantiate函数用于在场景中创建一个新的游戏对象实例

在Unity中&#xff0c;Instantiate函数用于在场景中创建一个新的游戏对象实例。它的语法如下所示&#xff1a; public static Object Instantiate(Object original, Vector3 position, Quaternion rotation); original&#xff1a;要实例化的原始游戏对象。position&#xff1…...

解决 tesserocr报错 Failed to init API, possibly an invalid tessdata path : ./

问题描述 我们在初次使用tesserocr库的时候&#xff0c;可能会报以下错误&#xff1a; RuntimeError: Failed to init API, possibly an invalid tessdata path: ./ 这是因为我们在使用 conda 创建的环境中找不到"tessdata"这个文件夹。 解决办法 这时候把Tessera…...

使用Python CV2融合人脸到新图片--优化版

优化说明 上一版本人脸跟奥特曼图片合并后边界感很严重&#xff0c;于是查找资料发现CV2还有一个泊松函数很适合融合图像。具体代码如下&#xff1a; import numpy as np import cv2usrFilePath "newpic22.jpg" atmFilePath "atm2.jpg" src cv2.imrea…...

Python分享之对象的属性

Python一切皆对象(object)&#xff0c;每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 属性的__dict__系统 对象的属性可能来自于其类定义&#xff0c;叫做类属性(class attribute)。类属性可能来自类定义自身&#xff0c;也可能根据类定义继承来的…...

电子商务网站建设及推广方案论文/怎样查询百度收录和排名情况

1(癌症)0&#xff08;非癌症&#xff09;1&#xff08;预测为癌症&#xff09;True Positive False Positive0&#xff08;预测为非癌症&#xff09;False Nagative True Negative判断癌症病人的分类器好坏标准&#xff1a; 1.准确率&#xff08;Precision&#xff09; 预测…...

用新浪云做网站/百度竞价排名什么意思

小编典典将该文件放入资产中 。对于在Android Studio项目中创建的项目&#xff0c;您需要在主文件夹下创建资产文件夹。将该文件读取为&#xff1a;public String loadJSONFromAsset(Context context) {String json null;try {InputStream is context.getAssets().open("…...

access 网站数据库/seo分析工具有哪些

其实每个设计模式都是很重要的一种思想&#xff0c;看上去很熟&#xff0c;其实是因为我们在学到的东西中都有涉及&#xff0c;尽管有时我们并不知道&#xff0c;其实在Java本身的设计之中处处都有体现&#xff0c;像AWT、JDBC、集合类、IO管道或者是Web框架&#xff0c;里面设…...

做h5最好的网站/免费收录链接网

总结一下auniapp开发安卓app的调试方式及打包; 代码编程查看文档即可.; 1通过vue-cli方式初始化项目 参考地址: https://uniapp.dcloud.io/quickstart-cli 2 将app实时安装到手机上 使用vscode编辑代码, 使用hubuilder去调试运行及打包 手机打开开发者模式 连接电脑 选中运…...

wordpress 斜杠/百度趋势搜索

自带的底部导航 在 app.json 中添加 &#xff0c; 所有小程序的页面都会显示出来 {"tabBar": {"list": [{"pagePath": "pages/index/index","iconPath":"","text": "首页"},{"pagePat…...

wordpress 评论go跳转/百度官方电话号码

最近跑老外的程序[1] 又出问题了&#xff1a;??? Error: File: computeScores.m Line: 17 Column: 28Unbalanced or unexpected parenthesis or bracket.我用的是Matlab R2009a&#xff0c;识别出了程序里的几处语法错误&#xff1a;img gray2rgb(img); %always have 3 cha…...