成功登录 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 错误请求错误
使用带有 JWT Auth/Laravel 的 Angular JS 获取新的刷新令牌后,如何恢复/重新发送请求?