我可以使用 PATCH 请求在 Google 存储对象上设置自定义元数据吗?

问题描述 投票:0回答:1

根据文档,答案似乎是肯定的,我可以。

但是,当我发送 PATCH 请求时,服务器的响应是

405 Method Not Allowed
响应中带有
Allow DELETE, GET, HEAD, OPTIONS, POST, PUT
标头。

您可能会注意到,文档提供了使用带有标头

X-Http-Method-Override: PATCH
的 POST 方法,以防某处的代理不喜欢
PATCH
方法。

我已经尝试过,结果完全相同 -

405 Method Not Allowed

以下是所有请求标头:

:authority: storage.googleapis.com
:method: POST
:path: /cloud-storage-manager-test-bucket/alice.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=sweetvine-testing-service-acco%40sweetvine-systems-infra.iam.gserviceaccount.com%2F20240424%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240424T213255Z&X-Goog-Expires=3600&X-Goog-Signedheaders=host&x-goog-signature=0a068071f7e2ad6d3b725fded2f0fac6916d5c9481a9ce5c165b3b79b98bc6315653bd7ff034863a3edbc85147af3eba0edb532ac233834914d4e782c72770b2c504f4f08738aac7b6a184126a7ac8f2cb4f381da7be59c1cbb8e3017fd1cc1bd23ae5497ec13267de6c119db438589828a1542b8c8ab295be0b0d68bb0fe421f69dc72024b3b2997dd496d4edab79ec1ccbb3265031e3e5727ff27b60a422307deda1b67dc58e7eab5848e577cb4ddc0dd583c1b2daf3ffba7b41aa41944bd440c971cbad59f15d5fa4b7af3c43956f001a27ea84ae017f916372995b909d7b0a1f0dbc70100657d5125d66646ccf674ae7f74faa05e9ad2b86886f21171403
:scheme: https
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cache-Control: no-cache
Content-Length: 28
Content-Type: text/plain;charset=UTF-8
Origin: http://localhost:3000
Pragma: no-cache
Referer: http://localhost:3000/
Sec-Ch-Ua: "Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
X-Client-Data: <gibberish omitted>
Decoded: <ClientVariations omitted>
X-Http-Method-Override: PATCH

有趣的是,控制台似乎告诉我存在 CORS 违规,但这似乎是无稽之谈,因为预检请求返回 200(OK)

为了完整起见,这里是预检响应标头:

Access-Control-Allow-Headers: x-http-method-override
Access-Control-Allow-Methods: GET,PUT,POST,PATCH,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3600
Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
Cache-Control: private, max-age=0
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Wed, 24 Apr 2024 21:32:55 GMT
Expires: Wed, 24 Apr 2024 21:32:55 GMT
Server: UploadServer
X-Guploader-Uploadid: <numbers and letters>

而且,

PATCH
请求的有效负载是一些非常简单的 JSON。为了测试的目的,我想将标签
avatar
设置为值
true
:

{"metadata":{"avatar":true}}

很难相信 Google 会发布说“使用 PATCH”的文档,然后不允许使用 PATCH。但这还能是什么呢?我没看到。

google-cloud-storage
1个回答
0
投票

我重现了 405 错误,并注意到请求标头中的路径是

/cloud-storage-manager-test-bucket/alice.png?...
。我假设您使用的网址是
https://storage.googleapis.com/BUCKET\_NAME/OBJECT\_NAME

根据文档,HTTP 请求应使用以下 url 格式进行:

https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME

使用该格式发出的补丁请求应在请求标头中显示路径

/storage/v1/b/BUCKET\_NAME/o/OBJECT\_NAME 

© www.soinside.com 2019 - 2024. All rights reserved.