来自Microsoft Edge和IE的S3 PUT请求由于参数中的分号而失败

时间:2019-02-12 09:30:26

标签: internet-explorer amazon-s3 xmlhttprequest microsoft-edge

此问题可能与this question有关,但是平台不同,所以我不确定。我已经用angularJS编写了JavaScript代码,以将图像上传到s3,在大多数现代浏览器上,它似乎都可以正常工作,但据我测试,在Microsoft Edge和IE 11上都无法运行。

代码执行PUT调用以使用图像文件更新现有的s3 URI

let s3URLforImageUpload = encodeURI(response.payload.data) // already existing URI;
$http.put(s3URLforImageUpload, file, {headers: {'Content-Type': file.type}}) // file from ng-select directive
.success(function(response) {})
.catch(function(error) {})

我可以在网络标签中看到我的PUT请求的403。我不确定如何创建JSfiddle来重现此问题,但是由于某种原因会发生

Chrome或Firefox处理网址,我可以在网络标签中看到类似

的参数
X-Amz-SignedHeaders: content-type;host

但是在Microsoft Edge和IE11上,我将host视为一个单独的参数

X-Amz-SignedHeaders: content-type
host:

我尝试更改将请求发送到xmlhttprequest的代码,以查看参数发送方式是否有任何变化,并且它也给我相同的响应。

let s3URLforImageUpload = encodeURI(response.payload.data);
var req = new XMLHttpRequest();
req.onload = function(response) {
  console.log("RESPONSE 2", response);
}
req.open("PUT", s3URLforImageUpload);
req.setRequestHeader("Content-type", file.type);
req.send(file);

我得到相同的403响应,并且发送的参数也出现相同的问题。任何指导将不胜感激。

0 个答案:

没有答案