【问题标题】:The CORS header is present on PUT requests but not on OPTIONS requestsCORS 标头存在于 PUT 请求中,但不存在于 OPTIONS 请求中
【发布时间】:2021-02-21 05:51:09
【问题描述】:

我有一个具有以下 CORS 配置的 Google Cloud Storage 存储桶:

[
    {
      "origin": ["http://localhost:8080"],
      "responseHeader": [
        "Content-Type",
        "Access-Control-Allow-Origin",
        "Origin"],
      "method": ["GET", "HEAD", "DELETE", "POST", "PUT", "OPTIONS"],
      "maxAgeSeconds": 3600
    }
]

我正在使用以下代码生成签名 URL:

let bucket = storage.bucket(bucketName);
let file = bucket.file(key);

const options = {
    version: "v4",
    action: "write",
    expires: Date.now() + 15 * 60 * 1000, // 15 minutes
    contentType: "application/zip"
};

let url = await file.getSignedUrl(options))[0];

对于我的请求,我使用以下标头:

Origin: http://localhost:8080
Content-Type: application/zip

当我尝试使用 PUT 请求上传数据时,一切正常,我得到了包含我的 Origin 的 Access-Control-Allow-Origin 标头。但是,当我使用完全相同的标头执行 OPTIONS 请求时,它无法返回 Access-Control-Allow-Origin 标头。我已经尝试对我的 CORS 配置进行许多更改,但都没有像这样:

【问题讨论】:

    标签: google-cloud-platform cors google-cloud-storage google-api-nodejs-client pre-signed-url


    【解决方案1】:

    我在同事的帮助下解决了自己的问题,当我在 Postman 中测试函数时,CORS 标头没有作为对 OPTIONS 请求的响应发送,因为该请求缺少 Access-Control-Request-Method 标头。当我添加此标头时,它工作正常。

    【讨论】:

    • 很好地找到了解决方案!你能accept your own answer吗?它将使其更加明显,并在您找到解决方案时帮助遇到相同问题的人。谢谢!
    • 谢谢提醒,昨天告诉我只能明天(也就是今天)接受。
    【解决方案2】:

    请注意,如 public documentation 所述,您不应在 CORS 配置中指定 OPTIONS,并注意 Cloud Storage 仅支持 XML API 的 DELETE, GET, HEAD, POST, PUT 和 JSON API 的 DELETE, GET, HEAD, PATCH, POST, PUT。因此,我相信您使用 OPTIONS 方法所遇到的应该是预期行为。

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 2018-06-08
      • 2018-03-20
      • 1970-01-01
      • 2019-07-14
      • 2021-09-07
      相关资源
      最近更新 更多