You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PATCH请求设置Google Storage对象自定义元数据遇405错误求助

Google Storage对象PATCH设置自定义元数据返回405的问题

根据Google Storage官方文档,理论上可使用PATCH请求为对象设置自定义元数据,但实际发送PATCH请求时,服务器返回405 Method Not Allowed响应,响应头Allow字段包含DELETE、GET、HEAD、OPTIONS、POST、PUT方法。

文档提到若代理不支持PATCH方法,可使用POST请求并添加X-Http-Method-Override: 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

预检响应头

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>

请求负载

测试时希望将标签avatar设置为值true,请求负载为:

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

另外,控制台提示存在CORS违规,但预检请求返回了200(OK),这一现象不符合预期。


可能的原因分析

  • 预签名URL与请求方法不匹配:你使用的是带签名的URL,但预签名URL是绑定请求方法的。如果要通过POST+X-Http-Method-Override模拟PATCH,需要生成对应PATCH方法的预签名URL,而非POST方法的签名URL,否则服务器会拒绝请求。
  • Content-Type不正确:你的请求Content-Type为text/plain;charset=UTF-8,但PATCH(或方法覆盖的POST)请求的JSON负载需要设置Content-Type: application/json,服务器可能因格式不匹配返回405错误。
  • CORS配置细节遗漏:虽然预检返回200,但检查CORS规则是否允许application/json的Content-Type,若未配置可能导致实际请求触发CORS违规提示。
  • 权限或元数据格式问题:虽然返回的是405,但少数情况下权限不足或元数据键不符合规则(如含特殊字符)也可能引发误导性状态码,不过avatar属于合法键,此可能性较低。

内容的提问来源于stack exchange,提问作者gischer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:12:07