我已经使用 CORS 构建了一个 Web 应用程序来与 API 通信。
API 接受所有来源和一些标头,并使用 Play!Framework 编写。
在对应用程序发出的每个请求中,我都会添加以下标头:
override def doFilter(action: EssentialAction): EssentialAction = EssentialAction { request =>
action.apply(request).map(_.withHeaders(
"Access-Control-Allow-Origin" -> "*",
"Access-Control-Allow-Methods" -> "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers" -> "Origin, X-Requested-With, Content-Type, Accept, Host, Api-Token"
))
}
在桌面上的 Firefox 和 Chrome 中一切正常(在 Windows 和 Linux 下测试),但在我的 Android 手机上失败(使用 Chrome 浏览器和本机浏览器)。
我通过 USB 启用了 Chrome 调试,我可以清楚地看到 Chrome 并没有比向服务器发出的 OPTIONS 请求更进一步。这是提出的要求:
Request URL:http://127.0.0.1:9100/auth/login
Request Headersview source
Access-Control-Request-Headers:accept, origin, x-requested-with, content-type
Access-Control-Request-Method:POST
Origin:http://192.168.0.15:9000
Referer:http://192.168.0.15:9000/login
User-Agent:Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36
它停在这里,没有来自服务器的响应(但网络选项卡指示此请求“待处理”!)。
所以现在我不知道出了什么问题。我该如何解决这个问题?