如此处所述:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html



我有将POST请求发送到我的play-2.1.1服务器的客户端。他以这种方式发送:

POST http://172.16.1.227:9000/A8%3aF9%3a4B%3a20%3a89%3a40/1089820966/ HTTP/1.1
Content-Length: 473
Content-Type: application/json
Date: Thu, 25 Apr 2013 15:44:43 GMT
Host: 172.16.1.227:9000
User-Agent: my-client

...some data...

拒绝所有请求,并显示“找不到操作”错误。我使用curl发送的完全相同的请求就很好了,它们之间的唯一区别是curl使用相对URI发送它:
POST /A8%3aF9%3a4B%3a20%3a89%3a40/1089820966/ HTTP/1.1
Accept: */*
Content-Length: 593
Content-Type: application/json
Host: 172.16.1.227:9000
User-Agent: curl/7.30.0

我在Global.scala中创建了以下简单的解决方法:
override def onRouteRequest(request: RequestHeader): Option[Handler] = {
  if (request.path.startsWith("http://")) {
    super.onRouteRequest(request.copy(
      path = request.path.replace("http://"+request.host, "")
    ))
  } else super.onRouteRequest(request)
}

通过这种解决方法,可以正确处理来自我的客户端的所有请求。

那么,在Play框架中是否有更直接的方法可以做到这一点呢?

最佳答案

多亏了@nraychaudhuri,Play 2.2支持absoluteURI样式的请求 header 。

这是问题和请求请求:https://github.com/playframework/playframework/pull/1060

10-08 07:20