CORS 随机阻塞请求

Posted

技术标签:

【中文标题】CORS 随机阻塞请求【英文标题】:CORS blocking requests randomly 【发布时间】:2020-12-14 03:50:28 【问题描述】:

我目前使用 api rest 来通过 URI 传递控制器参数、版本和操作。但是,当我使用超过 19 个字符的 URI 执行请求时,会出现以下 CORS 错误:

CORS 策略已阻止从源“http://localhost:3000”访问“http://my-api-host/toll/vehicle/v1/list”处的 XMLHttpRequest:对预检请求的响应没有“ t 通过访问控制检查:它没有 HTTP ok 状态。

在身份验证中,即使 URI 超过 19 个字符,请求也能正常工作。但是,具有超过 19 个字符的不同 URI 的任何其他请求都会产生相同的错误。我使用我的应用程序的 API 并且请求正常工作。

我在 Reactjs 中使用 axios。该 api 已经配置为接受我正在使用的内容类型(应用程序/json),并且也已经在接受来自不同来源的请求。

我的请求代码:

request(uri, params = )
        return new Promise((resolve, reject) => 
            axios
                .post('http://my-api-host' + uri, JSON.stringify(params), 
                    headers: 
                        'Content-Type': 'application/json'
                    
                )
                .then(response => 
                    if (response.data.success) 
                        resolve(response.data);
                     else 
                        reject(response.data);
                    
                );
        );
    ;

奇怪的是,如果我在我的 API 中打印一些数据,请求会返回 200,然后我会捕获我打印的数据。在我这样做之后,它可以处理之前给出此错误的所有请求,然后我在 api 中再次打印一些数据并且它再次工作。是不是很奇怪?

【问题讨论】:

询问谁负责您的 API 服务器……? 我们不可能知道为什么在这种情况下它会以不成功的代码进行响应。 服务器正确响应请求。在我们使用另一个带有 html 和 jquery 的 web 项目之前,一切都很好。我们也通过移动应用程序使用它,我们没有问题。但是我在 web 项目中使用 reactjs 时遇到了这个问题。 那么去弄清楚您现在提出的请求与您之前提出的有效请求有何不同。要么就是这样,要么检查接收端。您将不得不以一种或另一种方式在这里进行一些实际的调试。 这就是我的兴趣所在。我已经使用与上一个项目中使用的相同结构(使用 fetch)发出请求。我还做了正确的 apache 配置(允许 cors、来自不同来源的请求和 json 内容)。我已经调试了来自我的 api 请求的入口点,一切正常。我尝试了其他配置但没有任何解决,我只能通过在执行验证(有效令牌、操作、工具和访问级别)之前在我的 api 入口点返回一些数据来执行请求,然后在从随机数据中删除此返回之后请求有效。 【参考方案1】:

已解决!

问题是我的 API 接受了请求,但没有正确处理 OPTIONS 请求并且没有响应代码 200。

解决方案:

除了接受响应代码 200 之外,我还应用了 REQUEST_METHOD 何时为 OPTIONS 的比较。

【讨论】:

以上是关于CORS 随机阻塞请求的主要内容,如果未能解决你的问题,请参考以下文章

Ionic V3 请求在 Chrome 浏览器和模拟器中随机失败

启用 CORS 的服务器不拒绝请求

生成随机 UUID 非阻塞

随机数SecureRandom在Linux下阻塞

再谈随机数引起的阻塞问题

跨域访问JSONP CORS