【问题标题】:AbsoluteURI support in Play Framework 2.1Play Framework 2.1 中的 AbsoluteURI 支持
【发布时间】:2013-04-25 12:13:20
【问题描述】:

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

为了允许在 HTTP 的未来版本中的所有请求中转换为 absoluteURI,所有 HTTP/1.1 服务器必须在请求中接受 absoluteURI 形式,即使 HTTP/1.1 客户端只会在对代理的请求中生成它们。

我有客户端向我的 play-2.1.1 服务器发送 POST 请求。他是这样发送的:

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 Framework 中是否有更直接的方法或仅此一种方法?

【问题讨论】:

标签: scala playframework routes playframework-2.1


【解决方案1】:

感谢@nraychaudhuri Play 2.2 支持absoluteURI 样式的请求标头。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多