2013-04-25 6 views
13

Как указано здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.htmlподдержка AbsoluteURI в Play Framework 2.1

Чтобы обеспечить переход к absoluteURIs во всех запросах в будущих версиях 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... 

Все запросы отклоняются с ошибкой «Действие не найдено». В том же запросе, который я отправленный с завитком просто отлично, и единственное различие между ними завитком отправить его с относительной 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 или это единственный способ?

+6

Вы должны опубликовать эту тему на ссылку Play рассылки https://groups.google.com/forum/?fromgroups=#!forum/play-framework –

ответ

Смежные вопросы