微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CORS标头出现在PUT请求上,但没有出现在OPTIONS请求上

如何解决CORS标头出现在PUT请求上,但没有出现在OPTIONS请求上

我有一个具有以下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配置进行许多更改,但是没有一个像这样工作:

解决方法

我在同事的帮助下解决了自己的问题,当我在邮递员中测试该功能时,未发送CORS标头作为对OPTIONS请求的响应,因为该请求缺少{{1} }标头。当我添加此标头时,效果很好。

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。