Vue.js 选项请求失败,返回404

Vue.js 选项请求失败,返回404,vue.js,playframework,cors,axios,Vue.js,Playframework,Cors,Axios,我正在尝试从前端向API应用程序发送GET请求。两者都在我的本地机器上运行。这就是它现在的建造方式: backend <===> frontend <=x=> API application 但当我从前端呼叫时,我在期权呼叫中得到了404。它在Firefox中也给了我一个与CORS header相关的警告Access Control Allow Origin: Cross-Origin Request Blocked: The Same Origin Policy di

我正在尝试从前端向API应用程序发送GET请求。两者都在我的本地机器上运行。这就是它现在的建造方式:

backend <===> frontend <=x=> API application
但当我从前端呼叫时,我在期权呼叫中得到了404。它在Firefox中也给了我一个与CORS header相关的警告
Access Control Allow Origin

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the
remote resource at http://api-application.docker:9000/api/user?userId=1
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
因此,我首先进入api应用程序的
application.conf
并添加了

play.filters.cors {
  allowedOrigins = ["*"]
}
我还尝试将星号替换为
http://frontend.docker:8080

这不起作用,因此我再次删除了该条目,并添加了以下行:

play.filters.disabled += "play.filters.cors.CORSFilter"
还是没有变化。现在我想知道我是否误解了选项和CORS之间的联系?还是我关错了?有人能帮我吗

编辑: 我在等待答案时尝试了更多的东西,但都没有成功:

我将
application.conf
中的条目更改为:

play.filters.cors {
  allowedOrigins = null
}

404 on OPTIONS request表示您的
CORSFilter
未启用。由于您使用的是Play 2.5,因此可以通过添加

libraryDependencies += filters 
到您的
build.sbt
,并通过创建以下
app/Filters.scala
文件:

import javax.inject.Inject
import play.api.http.DefaultHttpFilters
import play.filters.cors.CORSFilter

class Filters @Inject() (corsFilter: CORSFilter)
  extends DefaultHttpFilters(corsFilter)
默认情况下,一切都是允许的,因此在您决定开始锁定访问之前,无需修改
application.conf
。您不应该添加
play.filters.disabled+=“play.filters.cors.CORSFilter”
,因为这样会禁用cors支持

curl
请求工作正常的原因是非浏览器HTTP客户端不强制执行同源策略(请参阅),因此CORS不适用于
curl
的情况

404 on OPTIONS request表示找不到以下路由:

OPTIONS api-application.docker/api/user

浏览器会在发送相应的GET请求之前自动发送此消息。一旦启用,此选项路线将由Play的CORS支持自动处理。

看起来您并没有遵循此路线,但它确实工作得很好。多谢各位。我的过滤器也位于application.conf中链接到的非标准路径中。但是在按照你的建议重构了所有东西之后,它确实很有魅力。
OPTIONS api-application.docker/api/user