13
如这里指出: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html绝对URI支持2.1
要允许过渡到absoluteURIs在HTTP的未来版本中的所有请求,所有的HTTP/1.1服务器必须接受请求的绝对URI形式,甚至尽管HTTP/1.1客户端只会在代理请求中生成它们。
我有客户端发送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...
所有请求都会被拒绝,并显示“Action not found”错误。这是我送使用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框架或多数民众赞成的唯一途径?
你应该张贴播放邮件链接就这个问题https://groups.google.com/forum/?fromgroups=#!forum/play-framework – 2013-04-25 15:15:44