Jak stwierdzono tutaj: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.htmlAbsoluteURI wsparcie w grze Framework 2.1
celu umożliwienia przejścia do absoluteURIs we wszystkich wniosków w przyszłych wersjach HTTP, wszystko HTTP/1.1 serwery muszą przyjąć formę absoluteURI w prośby, nawet chociaż klienci HTTP/1.1 generują je tylko w żądaniach do serwerów proxy.
Mam klienta, który wysyła żądania POST do mojego serwera play-2.1.1. Wysyła go w ten sposób:
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...
Wszystkie wnioski są odrzucane z błędem "Nie znaleziono czynności". Ten sam wniosek które wysyłają za pomocą curl jest po prostu w porządku, a jedyna różnica między nimi jest curl wysłać go z względną 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
stworzyłem następujące proste obejście w 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)
}
Dzięki temu obejściu wszystkie żądania od mojego klienta są obsługiwane poprawnie.
Czy istnieje więcej prostych sposobów na zrobienie tego w Play Framework, czy to jedyny sposób?
Należy zakładać ten temat w linku play korespondencji https://groups.google.com/forum/?fromgroups=#!forum/play-framework –