当前位置: 首页 > 知识库问答 >
问题:

Google Cloud函数不会返回我使用Go设置的CORS头

单于奕
2023-03-14
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)
    }
}

当我尝试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应用程序调用云函数时,我会得到以下错误:交叉起源请求被阻塞:同一起源策略不允许读取https://us-central1-my-function.cloudfunctions.net/myfunction的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。

共有1个答案

狄易安
2023-03-14

这是你的云功能应该具备的标准形态。它应该检查preflight请求发送的OPTIONS方法并设置Heathers。那么它应该为主请求发送heathers。

在这里你可以找到更多信息:

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


 类似资料:
  • 问题内容: 这是我的代码。出于某种原因,如果我提交表单时未放置密码,则仍会创建数据库条目。整个代码中散布着一些注释,但是代码相当简单。有任何想法吗? 问题答案: 如果声明了变量,则仍然设置空字符串和/或空字符串。尝试这个:

  • 问题内容: 我正在Windows上的Go 1.6中工作,尝试将证书容器导出到PFX(此处的最终目标是从证书存储区访问可导出的私钥)。 我已经打开了一个内存存储并将证书插入到存储中: 现在,我想生成该商店的PFX。我已经定义了一个用于包含数据blob的结构,并希望使用PFXExportCertStoreEx来获取商店的PFX: 这 一半 有效。 填充了看起来像一个适当的值(即,如果我增加更多的证书商

  • Go语言内置支持多返回值,这个在Go语言中用的很多,比如一个函数同时返回结果和错误信息。 package main import "fmt" // 这个函数的返回值为两个int func vals() (int, int) { return 3, 7 } func main() { // 获取函数的两个返回值 a, b := vals() fmt.Println(a

  • 实际上,我正在使用DynamoDBmapper查询我的dynamo表。为此,我创建了两个类,映射程序使用它们转换表返回的查询。见下文 ame.java java 然后我在HashKey上查询我的表,如下所示 对于GSI,我会这样做 一切都很好,但是对于名为typos的字段,我得到了两个查询之间的差异。对于customer_id,我获得如下完整元素 但对于同一个用户,但使用他的GSI,我得到如下结果

  • 函数接受参数。在 Go 中,函数可以返回多个“结果参数”,而不仅仅是一个值。它们可以像变量那样命名和使用。 如果命名了返回值参数,一个没有参数的return语句,会将当前的值作为返回值返回。注意,如果遇到if等代码块和返回值同名,还需要显示写出返回值。 package main import "fmt" func split(sum int) (x, y int) { x = sum *

  • 问题内容: 我有一个箭头函数,看起来像这样(简化): 但是当我调用它时,我得到: 为什么? 例: ( 注意: 对于上述带有箭头功能的 特定 问题,这是一个干净,规范的重复目标。) 问题答案: 当您使用箭头函数的函数主体版本(带有)时,没有暗示。您必须指定它。当您使用 简洁 主体(no )时,主体表达式的结果将由函数隐式返回。 因此,您可以使用显式的方式编写该代码: 或简洁的主体: 例子: 略 切线