CORS header 存在于 PUT 请求中,但不存在于 OPTIONS 请求中
The CORS header is present on PUT requests but not on OPTIONS requests
我有一个具有以下 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];
对于我的请求,我使用以下 headers:
Origin: http://localhost:8080
Content-Type: application/zip
当我尝试使用 PUT 请求上传数据时,一切正常,我得到了包含我的 Origin 的 Access-Control-Allow-Origin header。但是,当我使用完全相同的 header 执行 OPTIONS 请求时,它无法 return Access-Control-Allow-Origin header。我已尝试对我的 CORS 配置进行许多更改,但 none 的效果如下:
- 将原点更改为
*
- Whosebug 答案和评论中描述的不同变化。
- GitHub Google Storage API Issues
中描述的不同变化
请注意,如 public documentation 所述,您不应在 CORS 配置中指定 OPTIONS 并注意云存储仅支持 DELETE, GET, HEAD, POST, PUT
XML API DELETE, GET, HEAD, PATCH, POST, PUT
JSON API。因此,我相信您在使用 OPTIONS
方法时遇到的情况应该是预期的行为。
我在同事的帮助下解决了自己的问题,当我在 Postman 中测试功能时,CORS header 没有作为对 OPTIONS
请求的响应发送,因为请求是缺少 Access-Control-Request-Method
header。当我添加这个 header 它工作正常。
我有一个具有以下 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];
对于我的请求,我使用以下 headers:
Origin: http://localhost:8080
Content-Type: application/zip
当我尝试使用 PUT 请求上传数据时,一切正常,我得到了包含我的 Origin 的 Access-Control-Allow-Origin header。但是,当我使用完全相同的 header 执行 OPTIONS 请求时,它无法 return Access-Control-Allow-Origin header。我已尝试对我的 CORS 配置进行许多更改,但 none 的效果如下:
- 将原点更改为
*
- Whosebug 答案和评论中描述的不同变化。
- GitHub Google Storage API Issues 中描述的不同变化
请注意,如 public documentation 所述,您不应在 CORS 配置中指定 OPTIONS 并注意云存储仅支持 DELETE, GET, HEAD, POST, PUT
XML API DELETE, GET, HEAD, PATCH, POST, PUT
JSON API。因此,我相信您在使用 OPTIONS
方法时遇到的情况应该是预期的行为。
我在同事的帮助下解决了自己的问题,当我在 Postman 中测试功能时,CORS header 没有作为对 OPTIONS
请求的响应发送,因为请求是缺少 Access-Control-Request-Method
header。当我添加这个 header 它工作正常。