我在这里有相当简单的设置,如下面的代码所述.但是我不能让这CORS美元开动起来.我一直收到这个错误:

XMLHttpRequest无法加载http://localhost:3000/signup.对以下内容的响应 印前判断请求未通过访问控制判断:否‘访问- 请求的资源上存在Control-Allow-Origin标头. 因此不允许访问来源"http://localhost:8000".这个 响应具有HTTP状态代码403.

我肯定我错过了一些简单的东西.

以下是我拥有的代码:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "myApp/src/controllers"
)

func main() {
    ac := new(controllers.AccountController)

    router := mux.NewRouter()
    router.HandleFunc("/signup", ac.SignUp).Methods("POST")
    router.HandleFunc("/signin", ac.SignIn).Methods("POST")

    log.Fatal(http.ListenAndServe(":3000", handlers.CORS()(router)))
}

推荐答案

请阅读Markus建议的链接,并了解是什么触发了CORS飞行前请求.

Pre-flight requests:您可能有像JSON这样的内容类型,或者其他一些触发飞行前请求的自定义标头,而您的服务器可能没有处理这些请求.如果您在前端使用常用的Ajax,请try 添加以下代码:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requested-With

Gorilla的handlers.CORS()将设置合理的默认值,以便让CORS的基本功能为您工作;但是,您可以(也许应该)以更实用的方式进行控制.

以下是一些启动代码:

// Where ORIGIN_ALLOWED is like `scheme://dns[:port]`, or `*` (insecure)
headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
originsOk := handlers.AllowedOrigins([]string{os.Getenv("ORIGIN_ALLOWED")})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})

// start server listen
// with error handling
log.Fatal(http.ListenAndServe(":" + os.Getenv("PORT"), handlers.CORS(originsOk, headersOk, methodsOk)(router)))

Go相关问答推荐

如何将泛型函数作为参数传递给golang中的另一个函数?

macOS上GoLand 2023.3.4中的代码导航

如何使用GO GIN从Auth0 JWT内标识检索权限

go中跨域自定义验证的问题

这种合并排序的实现有什么问题?

在 go 中,将接收器 struct 从值更改为指针是否向后兼容?

这是实现超时的常见方法,为什么 time.After 不起作用

linter 警告:返回值被忽略

由于 main.go 文件中的本地包导入导致构建 docker 容器时出错

如何仅提取时间作为持续时间

fmt.Printf() 标志 '0' 不会被字符串忽略

从动态输入中提取字符串,其中部分字符串可能不存在

在 docker kill --signal=SIGX 上以这种方式关闭容器内运行的 go 应用程序是否安全?

具有近似约束的函数值导致的实例化失败

分配空切片而不引用其类型?

从 Go struct 中提取标签作为 reflect.Value

带有 grpc 的 protobuf 用于拆分包中的 Go

如何获得Ent中数字列的总和

从 map 返回空数组而不是空字符串数组

Go 错误:Is() 和 As() 声称是递归的,是否有任何类型实现错误接口并支持这种递归 - 无错误?