Почему мой сервер Google Cloud Run возвращает ошибку CORS? - PullRequest
0 голосов
/ 20 апреля 2020

Я сделал бэкэнд в go и развернул его с помощью Google Cloud Run. Сейчас я пытаюсь пропинговать его с моего веб-сайта, размещенного локально, но затем я получаю ошибку CORS, такую ​​как

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

Это заголовки, которые я установил в своей функции обработчика http в go.

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)
}

1 Ответ

1 голос
/ 20 апреля 2020

Пожалуйста, проверьте этот пример из официальной документации:

// 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 .

...