gpt4 book ai didi

javascript - IE 的 AWS 签名问题

转载 作者:行者123 更新时间:2023-11-29 14:54:19 26 4
gpt4 key购买 nike

我目前正在致力于将文件直接上传到 S3。用户应该能够将一个/多个文件拖到站点的定义部分。然后对我的服务器的请求开始并为上传的文件生成签名

首先我请求从服务器计算的有效签名。生成的签名如下所示:

 [
{
"success_action_status":"<status>successful</status>",
"formAction":"http://[mybucket].s3.amazonaws.com",
"Policy":"ew0KICJleHBpcmF0aW9uIjoiMjAxMy0xMi0xMVQwODoxMjo1Ni4wMDBaIiwN\nCiAiY29uZGl0aW9ucyI6DQogWw0KICB7DQogICAiYnVja2V0IjoiaHJ3b3Jr\ncy1kb2N1bWVudHMtZGV2ZWxvcG1lbnQtc2ltIg0KICB9LA0KICB7DQogICAi\nYWNsIjoiYnVja2V0LW93bmVyLWZ1bGwtY29udHJvbCINCiAgfSwNCiAgWyAi\nc3RhcnRzLXdpdGgiLCIka2V5IiwiIl0sDQogIFsgInN0YXJ0cy13aXRoIiwi\nJENvbnRlbnQtVHlwZSIsIiJdLA0KICB7DQogICAic3VjY2Vzc19hY3Rpb25f\nc3RhdHVzIjoiPHN0YXR1cz5zdWNjZXNzZnVsPC9zdGF0dXM+Ig0KICB9DQog\nXQ0KfQ0K",
"signature":"z8vyDsAYzfFTW6bzrwMUrh/34Uc=",
"doumentId":"6X7TP57L8S8",
"acl":"bucket-owner-full-control",
"Content-Type":"application/pdf",
"AWSAccessKeyId":"AKIAIK67BLP7RUKG354A",
"key":"14250053/6X7TP57L8S8.pdf"
}
]

在此之后,我开始使用 xmlhtttprequest 将文件上传到 s3。在这里,我最近遇到了 success_action_redirect 不适用于此类请求的问题,因此您必须使用 success_action_status。上传后收到 success_action_status 消息后,我必须通知我的服务器,当前上传的文件的上传已成功完成最后一次请求。

我遇到的问题是:这在 Chrome、Opera 和 Firefox 中运行良好。但它在 IE 10 中失败了。我还可以将文件拖到文档部分进行上传,然后调用对我的服务器的请求(并附加到文件对象)。然后在控制台中,我看到一个带有 200 响应的 CORS 预检请求。所以这也有效。在此之后,在开始上传文件时,Internet Explorer 10 卡住并收到来自 amazon aws 的 403

 <?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<StringToSignBytes>65 77 30 4b 49 43 4a 6c 65 48 42 70 63 6d 46 30 61 57 39 75 49 6a 6f 69 4d 6a 41 78 4d 79 30 78 4d 69 30 78 4d 56 51 77 4f 44 6f 78 4d 6a 6f 31 4e 69 34 77 4d 44 42 61 49 69 77 4e 0a 43 69 41 69 59 32 39 75 5a 47 6c 30 61 57 39 75 63 79 49 36 44 51 6f 67 57 77 30 4b 49 43 42 37 44 51 6f 67 49 43 41 69 59 6e 56 6a 61 32 56 30 49 6a 6f 69 61 48 4a 33 62 33 4a 72 0a 63 79 31 6b 62 32 4e 31 62 57 56 75 64 48 4d 74 5a 47 56 32 5a 57 78 76 63 47 31 6c 62 6e 51 74 63 32 6c 74 49 67 30 4b 49 43 42 39 4c 41 30 4b 49 43 42 37 44 51 6f 67 49 43 41 69 0a 59 57 4e 73 49 6a 6f 69 59 6e 56 6a 61 32 56 30 4c 57 39 33 62 6d 56 79 4c 57 5a 31 62 47 77 74 59 32 39 75 64 48 4a 76 62 43 49 4e 43 69 41 67 66 53 77 4e 43 69 41 67 57 79 41 69 0a 63 33 52 68 63 6e 52 7a 4c 58 64 70 64 47 67 69 4c 43 49 6b 61 32 56 35 49 69 77 69 49 6c 30 73 44 51 6f 67 49 46 73 67 49 6e 4e 30 59 58 4a 30 63 79 31 33 61 58 52 6f 49 69 77 69 0a 4a 45 4e 76 62 6e 52 6c 62 6e 51 74 56 48 6c 77 5a 53 49 73 49 69 4a 64 4c 41 30 4b 49 43 42 37 44 51 6f 67 49 43 41 69 63 33 56 6a 59 32 56 7a 63 31 39 68 59 33 52 70 62 32 35 66 0a 63 33 52 68 64 48 56 7a 49 6a 6f 69 50 48 4e 30 59 58 52 31 63 7a 35 7a 64 57 4e 6a 5a 58 4e 7a 5a 6e 56 73 50 43 39 7a 64 47 46 30 64 58 4d 2b 49 67 30 4b 49 43 42 39 44 51 6f 67 0a 58 51 30 4b 66 51 30 4b</StringToSignBytes>
<RequestId>92D4E69C75687EB6</RequestId>
<HostId>27jK6m/fqwKxHIj77uVNP+WNjnIGGIP+tIGrRYwHD1MwDmf3kz5saN7a7KL5e1fA</HostId>
<SignatureProvided>z8vyDsAYzfFTW6bzrwMUrh/34Uc=</SignatureProvided>
<StringToSign>ew0KICJleHBpcmF0aW9uIjoiMjAxMy0xMi0xMVQwODoxMjo1Ni4wMDBaIiwN
CiAiY29uZGl0aW9ucyI6DQogWw0KICB7DQogICAiYnVja2V0IjoiaHJ3b3Jr
cy1kb2N1bWVudHMtZGV2ZWxvcG1lbnQtc2ltIg0KICB9LA0KICB7DQogICAi
YWNsIjoiYnVja2V0LW93bmVyLWZ1bGwtY29udHJvbCINCiAgfSwNCiAgWyAi
c3RhcnRzLXdpdGgiLCIka2V5IiwiIl0sDQogIFsgInN0YXJ0cy13aXRoIiwi
JENvbnRlbnQtVHlwZSIsIiJdLA0KICB7DQogICAic3VjY2Vzc19hY3Rpb25f
c3RhdHVzIjoiPHN0YXR1cz5zdWNjZXNzZnVsPC9zdGF0dXM+Ig0KICB9DQog
XQ0KfQ0K</StringToSign>
<AWSAccessKeyId>AKIAIK67BLP7RUKG354A</AWSAccessKeyId>
</Error>

我想知道为什么这在 firefox 和 chrome 中完美运行,但在 Internet Explorer 中却失败了。由于在我的服务器上创建了签名并且在两种情况下 (Chrome/IE) 都是“相同”的响应,因此签名应该匹配。

有人知道为什么 IE 失败而 chrome/firefox 运行良好吗?如果需要,我还可以发布我在亚马逊上的请求和回复。

最佳答案

在不使用 FormData(使用 How to send multipart/form-data form content by ajax (no jquery)?)重构整个 ajax 调用之后,错误也出现了,使用 fiddler2 时请求没有差异。但是,最后我找到了这个错误,使用 fiddler 和十六进制输出。

Firefox 和 Chrome 将 json 响应中的“\n”替换为“\r\n”,Internet Explorer 不会。默认情况下将“\n”替换为“\r\n”有效,并且是解决方案。现在它工作正常。

关于javascript - IE 的 AWS 签名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20489498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com