Ответ 1
Благодаря @nraychaudhuri Play 2.2 поддерживает заголовки запросов absoluteURI
.
Здесь запрос на запрос и pull: https://github.com/playframework/playframework/pull/1060
Как указано здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html
Чтобы разрешить переход к absoluteURI во всех запросах в будущих версиях HTTP, все серверы HTTP/1.1 ДОЛЖНЫ принять форму absoluteURI в запросах, хотя клиенты 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...
Все запросы отклоняются с ошибкой "Действие не найдено". Тот же запрос, который я отправляю с помощью 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 или это единственный способ?
Благодаря @nraychaudhuri Play 2.2 поддерживает заголовки запросов absoluteURI
.
Здесь запрос на запрос и pull: https://github.com/playframework/playframework/pull/1060