Gin跨域中间件

浏览器有跨域限制,需要在header里添加Access-Control-Allow-Origin

package middleware

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func Cors() gin.HandlerFunc {
    return func(context *gin.Context) {
        method := context.Request.Method
        context.Header("Access-Control-Allow-Origin", "*")
        context.Header("Access-Control-Allow-Headers", "Content-Type, AccessToken, X-CSRF-Token, Authorization, Token")
        context.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
        context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
        context.Header("Access-Control-Allow-Credentials", "true")
        // 允许放行OPTIONS请求
                if method == "OPTIONS" {
            context.AbortWithStatus(http.StatusNoContent)
        }
        context.Next()
    }
}

添加中间件

r.Use(middleware.Cors())

有一个补充,前端如果需要添加自定义请求头字段时,比如token

这时浏览器会预先发一个OPTIONS类型的请求,如果添加的自定义字段没有包含在“Access-Control-Allow-Headers”里面的话,前端只会收到一个没有body的response

所以此时Cors中间件中不仅要处理OPTIONS类型的请求,也要在Access-Control-Allow-Headers添加这个自定义字段

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、解决浏览器跨域问题的方法有很多种 通过后端设置 http Access-Control-* 相关响应头 通过 ...
    SimpleCXD阅读 2,040评论 0 0
  • 前言部分 一、跨域是什么? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源(广义的)。 广义的跨域场景有以...
    爆发吧小宇宙阅读 3,414评论 0 12
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,156评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,441评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 981评论 0 4

友情链接更多精彩内容