我正试图通过scalajs向我的(akka-http)后端发帖。
同样的电话是在邮递员工作,但是当我实际上从Chrome调用时失败 - scalajs
scalajs中的代码
ext.Ajax.post(<url>, <json>, headers = Map("Content-Type" -> "application/json"))
我在Chrome控制台中收到以下错误
XMLHttpRequest cannot load <url>. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 405.
当我看一下邮递员的javascript代码(生成代码片段)时,我看到以下内容
var settings = {
"async": true,
"crossDomain": true,
"url": <url>,
"method": "POST",
"headers": {
"content-type": "application/json",
"cache-control": "no-cache",
"postman-token": "273f35c9-1d2a-12d8-30d6-8523d479869e"
},
"processData": false,
"data": <json>
}
$.ajax(settings).done(function (response) {
console.log(response);
});
如上所述,我可以从邮递员访问我的后端,不知道我在scalajs中缺少什么,我正在考虑crossDomain
设置,但是如果 - 所以我不知道如何设置它在我的scalajs请求中。
可能有一些明显的解决方案。
此外,获取请求实际上正在运行
编辑:我正在添加后端部分akka-http路由器
respondWithHeaders(`Access-Control-Allow-Origin`.*, `Access-Control-Allow-Methods`(HttpMethods.GET, HttpMethods.POST),
`Access-Control-Allow-Headers`("Origin, X-Requested-With, Content-Type, Accept, Authorization")) {
pathPrefix("..."){...
这是当前状态,所以我错过了什么?
感谢您的帮助。
答案 0 :(得分:1)
这里发生的事情是,Chrome阻止您访问后端,因为:
Access-Control-Allow-Origin
标头的含义)。由于此检查发生在前端/ chrome中,因此请求与邮递员的效果非常好。
因此,要正确解决此问题,您应该配置akka-http以添加正确的Access-Control-Allow-Origin
标头。
如果您只是需要测试,可以使用标记--disable-web-security
启动chrome。
非常小心,因为它会使您(作为互联网用户)容易受到CSRF和其他讨厌的忙碌影响。 不要始终使用此标记。