使用 superagent 和 Lumen API 被 CORS 策略阻止的请求
Posted
技术标签:
【中文标题】使用 superagent 和 Lumen API 被 CORS 策略阻止的请求【英文标题】:Request blocked by CORS policy using superagent and a Lumen API 【发布时间】:2020-07-03 01:14:45 【问题描述】:我使用 php Lumen 框架创建了一个 REST API,我使用以下框架删除了所有 CORS 限制:
// Enable CORS on all API routes
header('Access-Control-Allow-Origin: *');
header("Access-Control-Expose-Headers: Content-Length, X-JSON");
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Authorization, Lang, Content-Type, X-Auth-Token');
然后在前端我使用库superagent 来调用它。例如我调用路由POST http://127.0.0.1:8000/auth/register
:
superagent.post('http://127.0.0.1:8000/auth/register').send(
name: 'name',
email: 'test@test.test',
password: '1234Test'
).type('application/json')
.end((err, res) =>
console.log(res)
console.log(err)
)
很遗憾,我收到一条我无法理解的 CORS 错误消息:
从源“http://localhost:9000”访问位于“http://127.0.0.1:8000/auth/register”的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。
我做了一些研究,但我找不到任何关于错误 It does not have HTTP ok status
的内容,并且在 Postman 上测试同样的请求没有给我任何错误,而是正常行为。
有人知道我该如何解决吗?在哪里可以找到有关此类错误的一些文档?
【问题讨论】:
OPTIONS
请求未返回 200 OK
。
@M1K1O 哦,谢谢您知道如何解决这个问题吗?是在服务器端吧?这是一般的 PHP 还是来自 Lumen 框架?
@johannchopin — 首先查看它得到的响应,然后您就可以开始找出原因。
@Quentin It does not have HTTP ok status
好的,但我从未遇到过这种类型的错误,在 Postman 上我没有收到此错误,而是我的请求的正常行为。我只是想了解它。如何返回200 OK
?我真的不知道从哪里开始。
@johannchopin 你确定问题不在那里,但有时在你睡着的时候完成你的代码的奴才会犯一些错误。所以请向我们提供具体代码以及网络+控制台出现错误的屏幕截图。只有知道代码中发生了什么,我们才能提供帮助。
【参考方案1】:
我很好奇为什么您要自己“手动”设置标头,而不是使用一些现有且经过验证的 CORS-Middlwares,它们将为您带来所有魔力。除非您在学习案例中需要它,否则我会避免重新发明***。
这是***上的一个副本:
Enable CORS in lumen
这里是关于 lumen 中间件的官方文档:
https://lumen.laravel.com/docs/7.x/middleware
这里有一些结构良好且知名的中间件可以为您完成这项工作:
https://github.com/fruitcake/laravel-cors https://github.com/spatie/laravel-cors【讨论】:
哦,哇,谢谢您的研究,我不明白为什么我错过了这个 SO 回复。我验证了您的答案并投票赞成。但是,如果我给你赏金,你会愿意给这个答案***.com/a/49832833/8583669 吗?这取决于您,但我将非常感激您,您将获得Altruist
徽章;)
@johannchopin 很公平,很高兴我能提供帮助。我今天正在考虑获得徽章并正在寻找问题。这似乎是它的完美时刻。
顺便问一下:你觉得Peer Pressure
徽章怎么样?由于您的问题是“重复的”,因此在您删除它以获得它之前,我会对其投反对票(对 -3 票投反对票)。一旦我收到赏金,我将代理链接的问题。
好吧,让我们在 18 小时内完成 ;)
我不确定我是否会在 18 小时后上线。无论如何,如果您奖励我或在此处删除您的问题,我已经开始了赏金;)以上是关于使用 superagent 和 Lumen API 被 CORS 策略阻止的请求的主要内容,如果未能解决你的问题,请参考以下文章
Google Places web api 不与 superagent 合作
可用于nodejs的SuperAgent(ajax API)