我正在try 对我的端点(http:localhost:8080/orders?page=10&pageSize=10)进行api调用,这是在Go with the Gin框架中编写的.我的前端是一款Nextjs应用程序.我收到"原始‘http://localhost:3000’已被CORS策略阻止:请求的资源上不存在‘Access-Control-Allow-Origin’标头".

我试过https://github.com/gin-contrib/corshttps://github.com/rs/cors.我也try 手动设置标题,但我似乎不能使它工作.

现在,我的代码如下所示:

func Init(init *configs.Initialization) *gin.Engine {

    router := gin.New()
    router.Use(cors.Default())
    router.Use(gin.Logger())
    router.Use(gin.Recovery())

    orders := router.Group("/orders")
    {
        orders.GET("/", init.OrderController.GetOrders)

        orders.GET("/:orderID", init.OrderController.GetOrder)
    }

    return router
}

CORS是从"githorb.com/gin-conrib/cors"上进口的.

任何帮助都是感激的,我已经try 了每一个答案,我已经找到了,但没有运气.

推荐答案

考虑到一些事情,可能会帮助你解决问题:

  1. CORS不会是一个问题时,处理Simple Requests

    100

    跨源资源共享(CORS)中的简单请求是不触发飞行前判断的请求.他们必须符合以下标准:

    1. HTTP方法:仅限于GET、HEAD或POST.

    2. Content-Type:Content-Type标头必须为以下之一:

    • 应用程序/x-www-form-urlencode
    • 多部分/表单数据
    • 文本/纯文本
    1. 自定义Header:只允许简单的请求Header.这些措施包括:
    • 接受
    • 接受-Language
    • Content—Language
  • 如果你只是简单地提出一个GET请求,而没有任何自定义/aerg头,CORS应该不是一个问题.
  1. 请确保在Incognito Mode中测试该场景,或者在网络选项卡中禁用缓存.
  • 您的CORS preflight请求可能会被缓存,从而防止配置中的更改被apply.
  1. 确保正确设置了以下CORS选项:

    • Access-Control-Allow-Origin:此标头指示允许哪些来源访问资源.它可以设置为特定的原点、"*"或允许的原点列表.

    • EMAL—Control—BALL—Methods:指定访问资源时允许的方法(HTTP谓词).例如,"GET"、"POST"、"PUT"等.

    • EMAG—Control—BALL—Headers:指示在实际请求期间可以使用哪些头.这个报头用于响应飞行前请求.

    • Addition—Control—Allow—Credential:指定当credential标志为true时,是否可以公开对请求的响应.这允许随请求一起发送凭证(如cookie或授权头).

    • Access-Control-Max-Age:指定印前判断请求的结果(Access-Control-Allow-Methods和Access-Control-Allow-Header标头中包含的信息)可以缓存的时间长度.

    • 响应对象—Control—Expose—Headers:通过列出它们的名称,指示哪些头可以作为响应的一部分公开.

    • EMART—Control—Request—Method:在发出一个飞行前请求时使用,以指示方法(如GET、POST等).将在实际请求中使用.

    • 请求报头:在发出预飞请求时使用,以指示哪些报头将与实际请求一起发送.

  • 例如,如果使用link个标头对响应进行分页,则应考虑Access-Control-Expose-Headers个标头

Go相关问答推荐

Golang html/模板&需要错误数量的参数1在模板中使用';调用';获得0&q;

如果values.yaml文件中不存在某个属性,如何返回默认的FALSE?

从使用Golang otelmux检测的Otel跟踪中获取trace_id

格式化 Azure SDK 的 golang 时间

如何将 goose 迁移与 pgx 一起使用?

优化方式中所有可能组合的字符串相似度

Go Template 动态获取变量

使用Cookie身份验证的Gorilla Golang Websocket优化

如何测试光纤参数

使用图像解码 JPEG 时 colored颜色 不正确.解码并写入 PDF?

golang 中的可变参数函数

如何将元素从一个切片移动到另一个切片

如何在切片增长时自动将切片的新元素添加到函数参数

Golang Gin 绑定请求正文 XML 到 Slice

从 Makefile 运行时权限被拒绝

为什么import和ImportSpec之间可以出现多行注释,而PackageName和ImportPath之间不能出现?

如何在 Windows 中使用 github.com/AllenDang/giu 和 github.com/gordonklaus/portaudio 构建 GO 程序

在 golang 中联合一个接口和类型

具有多个嵌入式 struct 的 Go MarshalJSON 行为

Go 错误:cannot use generic type without instantiation