我做了一个后端,并使用Google Cloud Run进行了部署。现在,我尝试从本地托管的网站ping它,但是随后出现CORS错误,例如

type: "cors"
url: "https://abc.a.run.app/do-a"
redirected: false
status: 500
ok: false
statusText: ""
headers: Headers {}
body: (...)
bodyUsed: false

这些是我在go的http处理函数中设置的 header 。
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

我的处理函数被路由为
func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    http.HandleFunc("/do-a", endpoints.DoA)
    err := http.ListenAndServe(":"+port, nil)
    handle(err)
}

最佳答案

请从官方文档中查看this示例:

// Package http provides a set of HTTP Cloud Functions samples.
package http

import (
        "fmt"
        "net/http"
)

// CORSEnabledFunctionAuth is an example of setting CORS headers with
// authentication enabled.
// For more information about CORS and CORS preflight requests, see
// https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request.
func CORSEnabledFunctionAuth(w http.ResponseWriter, r *http.Request) {
        // Set CORS headers for the preflight request
        if r.Method == http.MethodOptions {
                w.Header().Set("Access-Control-Allow-Credentials", "true")
                w.Header().Set("Access-Control-Allow-Headers", "Authorization")
                w.Header().Set("Access-Control-Allow-Methods", "POST")
                w.Header().Set("Access-Control-Allow-Origin", "https://example.com")
                w.Header().Set("Access-Control-Max-Age", "3600")
                w.WriteHeader(http.StatusNoContent)
                return
        }
        // Set CORS headers for the main request.
        w.Header().Set("Access-Control-Allow-Credentials", "true")
        w.Header().Set("Access-Control-Allow-Origin", "https://example.com")
        fmt.Fprint(w, "Hello World!")
}

从您发布的代码中,我无法确定是否检查预检请求并设置Access-Control-Allow-Methods header 。

关于go - 为什么我的Google Cloud Run服务器返回CORS错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61313260/

10-13 03:26