ここで述べたように: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html
HTTP の将来のバージョンですべてのリクエストで絶対 URI への移行を可能にするために、HTTP/1.1 クライアントはプロキシへのリクエストでのみ絶対 URI フォームを生成しますが、すべての HTTP/1.1 サーバーはリクエストで絶対 URI フォームを受け入れなければなりません。
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 フレームワークでそれを行うためのより簡単な方法はありますか、それともそれが唯一の方法ですか?