Облачная функция Google не возвращает заголовки CORS, которые я установил с помощью Go - PullRequest
0 голосов
/ 25 марта 2020

Я понимаю, что есть похожие вопросы (например, Облачные функции Google включают CORS? ), но их ответы, похоже, не работают для меня.

Облачная функция Google иметь следующий код ответа:

func HelloWorld(w http.ResponseWriter, r *http.Request) {
    [...]
    response := make(map[string]interface{})
    w.WriteHeader(http.StatusOK)
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Allow", "GET, OPTIONS")
    w.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS")
    w.Header().Set("Access-Control-Allow-Headers", "*")
    response["list"] = list
    if err = json.NewEncoder(w).Encode(response); err != nil {
        fmt.Println(err)
    }
}

Обычно я думаю, что этого достаточно с Access-Control-Allow-Origin", "*", но, поскольку он не работает, я включаю и другие.

Когда Я пытаюсь curl -v "https://us-central1-my-function.cloudfunctions.net/myfunction", затем получаю следующий ответ:

[...]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200 
< content-type: text/plain; charset=utf-8
< function-execution-id: ivz4zonw37d1
< x-cloud-trace-context: b6929d3ddf88dc102f6f1f069404aeaa;o=1
< date: Wed, 25 Mar 2020 20:00:52 GMT
< server: Google Frontend
[...]

Когда я пытаюсь вызвать облачную функцию из моего локального vuejs приложения, я получаю следующую ошибку: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://us-central1-my-function.cloudfunctions.net/myfunction. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

1 Ответ

1 голос
/ 25 марта 2020

Это стандартная форма, которую должна иметь ваша облачная функция. Следует проверить метод OPTIONS, отправленный предварительным запросом, и установить верески. Затем он должен отправить верески для основного запроса.

Здесь вы можете найти дополнительную информацию:

Функции HTTP

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

import (
        "fmt"
        "net/http"
)

// CORSEnabledFunction is an example of setting CORS headers.
// For more information about CORS and CORS preflight requests, see
// https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request.
func CORSEnabledFunction(w http.ResponseWriter, r *http.Request) {
        // Set CORS headers for the preflight request
        if r.Method == http.MethodOptions {
                w.Header().Set("Access-Control-Allow-Origin", "*")
                w.Header().Set("Access-Control-Allow-Methods", "POST")
                w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
                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-Origin", "*")
        fmt.Fprint(w, "Hello, World!")
}


...