CORS错误,但仅在URL中包含特殊字符 [英] CORS errors but only with special characters in URL

查看:7
本文介绍了CORS错误,但仅在URL中包含特殊字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的客户端Web应用是用ANGLE编写的,服务器端是AWS API网关。

我收到错误:

Access to XMLHttpRequest at <my destiniation> from origin <my origin> has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

其中<my destination><my origin>不是同一个域。

问题是我确实有CORS设置来支持这一点。我的设置使用一个印前检查选项请求,然后是一个PUT请求(PUT是失败的403,控制台显示CORS错误)。OPTIONS请求的响应实际上包括access-control-allow-origin: *,最奇怪的是,只有当我的一个(或多个)URL参数参数中包含%23(例如,URL编码#符号的结果)时,我的PUT请求才会失败。

有谁知道为什么URL参数中的特殊字符会触发CORS错误,而没有特殊字符的完全相同的请求会毫无问题地通过CORS?我会错过什么?

推荐答案

多亏了sideshowbarker的帮助,我才得以解决这个问题。事实证明,CORS错误实际上是在转移人们的注意力。

深入研究后,我了解到AWS签名不匹配(但仅当包含特殊字符时),并且我发现我需要对参数进行双重编码才能正确计算签名。我对每个可能包含特殊字符的参数使用decodeURIComponent(),然后对生成的整个URL使用decodeURI()(有效地对有问题的参数进行双重编码)。现在签名通过,请求成功。

此问题/解决方案可能是我的客户端应用程序(以角度表示)处理AWS签名的唯一方式,但对于遇到类似错误的其他人来说,它可能会派上用场。

这篇关于CORS错误,但仅在URL中包含特殊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆