问题描述
我有一个具有以下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
方法所遇到的事情应该是预期的行为。