1

我已经使用 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

它停在这里,没有来自服务器的响应(但网络选项卡指示此请求“待处理”!)。

所以现在我不知道出了什么问题。我该如何解决这个问题?

4

1 回答 1

2

这可能是一个红鲱鱼,但我在标题中看到您显示字符串:

Request URL:http://127.0.0.1:9100/auth/login

在我看来,它试图连接到 localhost (127.0.0.1),但您的手机没有正在运行的服务器,所以它失败了。

于 2013-07-02T09:23:25.713 回答