对 GET 请求进行编码时,CORS 不起作用

Posted

技术标签:

【中文标题】对 GET 请求进行编码时,CORS 不起作用【英文标题】:CORS dosent work when GET request is encoded 【发布时间】:2019-07-28 08:37:11 【问题描述】:

我有一个提供一些 REST 端点的 Spring Boot 应用程序。

一个是 GET 请求端点:“APIURL/client/search/keyword”。它从数据库中所有现有客户中筛选出那些在名称-描述-国家/地区等中包含该词的客户。

前端部分的应用程序正在使用 NodeJS 和 PrimeReact。 它将调用该搜索 API

search = (filter) => 
        const queryString = filter;
        if (queryString) 
            fetch(`$API_URL/client/search/$queryString`)

我发现了一个小错误:如果我使用包含“/”的单词进行搜索,它将失败,因为调用将尝试“search/word/afterSlash”并以“404 Not Found”响应。 现在我将对这个词进行编码

let encodedQuery = encodeURIcomponent(query);

现在任何特殊单词都已编码,但 CORS 文件管理器对于“C/C++”之类的单词失败,但适用于“C++”。它说“不 响应中出现“访问控制允许来源” 但是在我的 Java 服务器中,我有

  response.setHeader("Access-Control-Allow-Origin", "*");

任何其他 API 都可以正常工作。

【问题讨论】:

【参考方案1】:

您不应该对 url 部分进行编码...您必须将 queryString 转换为请求参数(并对其进行编码)

$API_URL/client/search?query=$encodedQueryString

【讨论】:

哇,非常感谢。我差点忘了您可以通过 search/USA 或 search?country=USA 拨打电话。我现在无法测试它,但我很确定这会奏效!非常感谢 如果还有其他问题,我会回到这个问题,当然接受你的答案是正确的。

以上是关于对 GET 请求进行编码时,CORS 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 CORS 标头时,$.get 在 IE 中不起作用

AngularJS和rails cors标头不起作用

CORS 超薄框架。对 apache 的 Angular 请求不起作用

带有授权标头的 GET 请求之前的 OPTIONS 请求在苗条框架 4 中不起作用

发送范围请求时jQuery CORS请求不起作用

对 API 网关的 CORS 请求在浏览器中不起作用