Angular 没有进行 CORS 预检

Posted

技术标签:

【中文标题】Angular 没有进行 CORS 预检【英文标题】:Angular not making CORS preflight 【发布时间】:2017-05-18 23:58:21 【问题描述】:

我正在尝试使用 Lumen 构建一个新的 API(尽管我对此有第二个想法),并且正在尝试使用 barryvdh's CORS package。我想我已经正确设置了它,所以决定对默认路由设置做一个简单的角度请求。

使用我当前的手动设置 API,当我发出 API 请求时,我总是看到 2 个请求:第一个是 OPTIONS 请求,第二个是 POST/GET/DELETE/whatever。当我点击 Lumen api(在不同的子域上)时,我只看到一个请求,即我正在测试的 POST 或 GET。两者都返回我预期的结果,但我仍然得到No 'Access-Control-Allow-Origin' header is present on the requested resource.,大概是因为没有 OPTIONS 请求?

我对 CORS 的了解不够吗?这是预期的吗?我不懂流明吗?我不知道我哪里出了问题。

【问题讨论】:

CORS 选项始终在您尝试访问的服务器上声明。它是返回消息的服务器。因此,您需要访问(我认为)Lumen 服务器(我认为您无法访问)。因此,Lumen 可能需要您在他们的仪表板中声明您的域,或者其他什么。 这是我正在开发的 API,所以我正在设置 Lumen 应用程序。另外,Lumen 是一个框架,所以它没有仪表板;我必须设置它。 【参考方案1】:

您需要在 Lumen 中拦截 OPTIONS 请求并确保它返回 cors 标头。请参阅https://gist.github.com/danharper/06d2386f0b826b669552 您也可以尝试使用 Postman(一个用于测试 API 的好应用)来检查标头是否正确发送。 https://www.getpostman.com/.The 您要添加的标头是

'Access-Control-Allow-Origin' '*';
'Access-Control-Allow-Headers' 'Content-Type';

请注意,标头也可以添加到您的网络服务器而不是您的应用程序中,但这并不总是一个好主意。

【讨论】:

对不起。虽然我理解捕获 OPTIONS 请求的意思,但这是我不明白的部分内容:当我向 Lumen 服务器发出请求时,我没有看到我的应用程序发出 OPTIONS 请求,只有 POST/GET我发送。 好吧,回头,我明白你现在说的大部分内容了。我正在使用的包,我在上面链接的,遵循与您链接的代码基本相同的流程,但我猜它不起作用,很可能是因为我设置不正确:/

以上是关于Angular 没有进行 CORS 预检的主要内容,如果未能解决你的问题,请参考以下文章

在启动中启用 CORS 失败并出现预检错误

使用 Django 和 Angular 的 CORS 预检请求

CORS 预检通道在 Spring Security 中没有成功

在 C# 和 Angular 之间启用预检 CORS

Angular $http.delete CORS 错误(预检请求)

在 Angular 2 中使用基本身份验证预检 CORS 请求