ruby-on-rails-6 - 由于 BadDigest DigitalOcean S3 ActiveStorage,DirectUpload 失败
问题描述
我正在尝试上传文件,但收到如下错误消息:
https://sapco.nyc3.digitaloceanspaces.com/b3vcchphzgj5m8p6ld51yk7867uu?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=QTHCA5KKQUHAKMMATAIP%2F20200503%2Fnyc3%2Fs3%2Faws4_request&X-Amz-Date=20200503T214158Z&X-Amz-Expires=10800&X-Amz-SignedHeaders=content-md5%3Bcontent-type%3Bhost&X-Amz-Signature=7b77a0f1551a262586980b709fdc44a2bc173ab6ae7279385e831493b1d13e53
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>BadDigest</Code>
<BucketName>sapco</BucketName>
<RequestId>tx000000000000013462bc9-005eaf36fb-3518e03-nyc3a</RequestId>
<HostId>3518e03-nyc3a-nyc</HostId>
</Error>
我该如何进一步调试呢?
到目前为止,我已经尝试过:
- 重置我的访问密钥和密钥。
- 起初我以为这与 PWA 相关的工作有关,但我迁移到更早的分支并遇到了同样的问题。
- 尝试了不同的文件:每个文件都有相同的错误。
- 两者都发生在产品中。和本地。
更新 1:这随机开始再次生产。但是,它仍然在本地损坏。
使用同一个文件,我有PUT
导致上述错误的请求的 2 个路径。
- https://sapco.nyc3.digitaloceanspaces.com/11eego5a6r9b4tslx7cex4p9x45u?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=QTHCA5KKQUHAKMMATAIP%2F20200504%2Fnyc3%2Fs3%2Faws4_request&X-Amz-Date=20200504T005319Z&X-Amz-Expires= 10800&X-Amz-SignedHeaders=content-md5%3Bcontent-type%3Bhost&X-Amz-Signature=8d2037f7370eb137facc9d813fe35ed34e055313af06cd66819a72d886dfb018
- https://sapco.nyc3.digitaloceanspaces.com/z4vc7ujtvid0akqfn4uou46407zl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=QTHCA5KKQUHAKMMATAIP%2F20200504%2Fnyc3%2Fs3%2Faws4_request&X-Amz-Date=20200504T005405Z&X-Amz-Expires= 10800&X-Amz-SignedHeaders=content-md5%3Bcontent-type%3Bhost&X-Amz-Signature=b4b28cebe56a9b6c12ddfb2cc335b84080a3bfc5e34e2c66e19001230f8b7512
该问题必须与 X-Amz-Signature 的计算方式有关。
进一步挖掘,bundle open activestorage
我可以看到它大致在这里。https://cutt.ly/6yjc7u1
我验证了 Content-Length 和 Content-MD5 都是相同的(与本地和产品相比)。(123803 和ujNHxwCuwZ1mak927GUX3g==
分别)。
更新 2:我在 Firefox 中使用相同的图像进行了尝试,并且在本地没有问题。缓存一定有什么可疑之处。然后我尝试了一个隐身窗口,这似乎也有效。最后,我在 Chrome 中进行了一次硬刷新,现在我已经解锁了自己。没有完全弄清楚发生了什么,但为其他人留下了最后一条信息:
Chrome 请求标头(不工作,400 错误)
PUT /lw5lufemkgb7ww83pdc56qg2gb0j?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=QTHCA5KKQUHAKMMATAIP%2F20200504%2Fnyc3%2Fs3%2Faws4_request&X-Amz-Date=20200504T013900Z&X-Amz-Expires=10800&X-Amz-SignedHeaders=content-md5%3Bcontent-type%3Bhost&X-Amz-Signature=1ea88bf8550d9bab67b5bca3aa97f7b15f1a44e117dd4f5cea0744c898f70684 HTTP/1.1
Host: sapco.nyc3.digitaloceanspaces.com
Connection: keep-alive
Content-Length: 0
Pragma: no-cache
Cache-Control: no-cache
Accept: */*
DNT: 1
Content-MD5: ujNHxwCuwZ1mak927GUX3g==
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36
Content-Type: image/jpeg
Origin: http://localhost:3000
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: en
Firefox 请求标头(作品)
Host: sapco.nyc3.digitaloceanspaces.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: image/png
Content-Length: 254924
Referer: http://localhost:3000/
Content-MD5: z0lzYqq/S1TYxKqL0rJMPw==
Origin: http://localhost:3000
DNT: 1
Connection: keep-alive
Chrome 请求标头(已工作)
Host: sapco.nyc3.digitaloceanspaces.com
Connection: keep-alive
Content-Length: 123803
Pragma: no-cache
Cache-Control: no-cache
DNT: 1
Content-MD5: ujNHxwCuwZ1mak927GUX3g==
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36
Content-Type: image/jpeg
Accept: */*
Origin: http://localhost:3000
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: en
解决方案
硬刷新解决了这个问题。
推荐阅读
- python - sqlalchemy 条目的烧瓶管理员奇怪的行为
- javascript - 在 NS 7 应用程序中使用 Nativescript Filterable ListPIcker 插件和 Vue.js
- java - 从 Swing 中的 MenuItem 打开一个对话框并在关闭之前验证该对话框
- .net - 不变字符串的日期值
- javascript - 有没有办法在 VScode 中的选定文本上运行自定义 js 代码?
- angular - Angular - 在http拦截器中自动传递组件名称作为参数
- python-3.x - TypeError:“浮动”和“同步”的实例之间不支持“>”
- django - Django CBV (ListView) paginate_by not allowed with queryset
- regex - 正则表达式匹配像 ababba 这样的字符串
- r - 如何在R中的多个图中添加图例