成功登录 API 请求后,Angular 会为每个 API 调用触发额外的 OPTION 请求

Posted

技术标签:

【中文标题】成功登录 API 请求后,Angular 会为每个 API 调用触发额外的 OPTION 请求【英文标题】:After successful login API request Angular is firing extra OPTION request for every API call 【发布时间】:2018-07-09 03:08:33 【问题描述】:

我使用 codeigniter 作为后端,使用 ANGULAR 4 作为基于 REST 的前端客户端。问题是每个请求都发送两次,一个使用 OPTION,另一个使用 GET 或 POST。

控制台网络选项卡的屏幕截图。

https://imgur.com/a/xpNAU

我在控制台中为每个其他 API 请求获取了这个,一旦我有第一次成功登录 api。如何停止额外的 OPTION 请求,因为我的服务器没有编码来处理这个请求。我知道它必须与预检请求选项做一些事情,我不知道如何解决它。

更新

由于设置了以下自定义标头,我收到了额外的 OPTIONS 请求。

         this.headers.append('sessionname','7datfaaj6slo7p7htubtutn970l20lfd'); 

现在,我已经在服务器端启用了 CORS,并设置了这个条件来为 OPTIONS 请求提供正确的输出。

       $method = $_SERVER['REQUEST_METHOD']; if($method == "OPTIONS")  die(); 

所以它工作正常,但现在我的问题是处理这个烦人的 OPTIONS 请求的完美方式?

【问题讨论】:

在服务器端启用 cors competa.com/blog/… 您需要提供***.com/help/mcve。 这是由于跨域资源共享 (CORS),请阅读此developer.mozilla.org/en-US/docs/Web/HTTP/CORS 我认为我的情况类似于***.com/questions/30920422/… 现在在每个构造函数之前使用以下检查,我可以获得每个选项请求的正确响应代码。此 OPTION 标记由其他自定义标头触发。 【参考方案1】:

你可以使用这个插件:CORS Chrome Extension

【讨论】:

我不能为我的所有用户使用这个扩展,甚至有些用户没有使用 chrome。【参考方案2】:

正如下面的答案所述,发送 OPTIONS 的不是 REST 客户端,而是浏览器,因此您最好更新服务器端代码以满足浏览器的需求。

OPTIONS Explanation

【讨论】:

以上是关于成功登录 API 请求后,Angular 会为每个 API 调用触发额外的 OPTION 请求的主要内容,如果未能解决你的问题,请参考以下文章

通过 Angular 4 将 JWT 令牌附加到 api 请求

Instagram API 阻止在成功登录后重定向到 iOS 应用程序并出现 400 错误请求错误

AJAX 调用后添加授权标头

使用带有 JWT Auth/Laravel 的 Angular JS 获取新的刷新令牌后,如何恢复/重新发送请求?

使用 Angular 和 spring 进行 Jwt 身份验证

Angular - 每个请求都被 CORS 阻止