我的编程空间,编程开发者的网络收藏夹
学习永远不晚

go原生http web服务跨域restful api的写法示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

go原生http web服务跨域restful api的写法示例

这篇文章将为大家详细讲解有关go原生http web服务跨域restful api的写法示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

什么是go

go是golang的简称,golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,其语法与 C语言相近,但并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能。

错误写法

func main() {    openHttpListen()}func openHttpListen() {    http.HandleFunc("/", receiveClientRequest)    fmt.Println("go server start running...")    err := http.ListenAndServe(":9090", nil)    if err != nil {        log.Fatal("ListenAndServe: ", err)    }}func receiveClientRequest(w http.ResponseWriter, r *http.Request) {    w.Header().Set("Access-Control-Allow-Origin", "*")             //允许访问所有域    w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型    w.Header().Set("content-type", "application/json")             //返回数据格式是json    r.ParseForm()    fmt.Println("收到客户端请求: ", r.Form)

这样还是会报错:

说没有得到响应跨域的头,chrome的network中确实没有响应Access-Control-Allow-Origin

正确写法:

func LDNS(w http.ResponseWriter, req *http.Request) {    if origin := req.Header.Get("Origin"); origin != "" {        w.Header().Set("Access-Control-Allow-Origin", origin)        w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")        w.Header().Set("Access-Control-Allow-Headers",            "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")    }    if req.Method == "OPTIONS" {        return    }    // 响应http code    w.WriteHeader(200)    query := strings.Split(req.Host, ".")    value, err := ldns.RAMDBMgr.Get(query[0])    fmt.Println("Access-Control-Allow-Origin", "*")    if err != nil {        io.WriteString(w, `{"message": ""}`)        return    }    io.WriteString(w, value)}

补充:go http允许跨域

1.创建中间件

import ( "github.com/gin-gonic/gin" "net/http")// 跨域中间件func Cors() gin.HandlerFunc { return func(c *gin.Context) {  method := c.Request.Method  origin := c.Request.Header.Get("Origin")  if origin != "" {   c.Header("Access-Control-Allow-Origin", 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", "false")   c.Set("content-type", "application/json")  }  if method == "OPTIONS" {   c.AbortWithStatus(http.StatusNoContent)  }  c.Next() }}

2.在route中引用中间件

router := gin.Default()// 要在路由组之前全局使用「跨域中间件」, 否则OPTIONS会返回404router.Use(Cors())

关于“go原生http web服务跨域restful api的写法示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

go原生http web服务跨域restful api的写法示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

go原生http web服务跨域restful api的写法示例

这篇文章将为大家详细讲解有关go原生http web服务跨域restful api的写法示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是gogo是golang的简称,golang 是Google开
2023-06-14

go 原生http web 服务跨域restful api的写法介绍

错误写法func main() {openHttpListen() } func openHttpListen() {http.HandleFunc("/", receiveClientRequest)fmt.Println("go ser
2022-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录