如何解决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
}
]
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配置进行许多更改,但是没有一个像这样工作:
- 将原点更改为
*
- Stackoverflow中描述的不同变化是答案和评论。
- GitHub Google Storage API Issues 中所述的不同更改
解决方法
我在同事的帮助下解决了自己的问题,当我在邮递员中测试该功能时,未发送CORS标头作为对OPTIONS
请求的响应,因为该请求缺少{{1} }标头。当我添加此标头时,效果很好。
请注意,如public documentation所述,您不应在CORS配置中指定选项,并且请注意,Cloud Storage仅支持DELETE,GET,HEAD,POST,PUT
用于XML API,DELETE,PATCH,PUT
用于JSON API。 。因此,我相信您使用OPTIONS
方法所遇到的事情应该是预期的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。