From e7b6e2a402922724ffd668161ed1b65533b5c034 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Wed, 1 Feb 2012 14:08:29 -0800 Subject: Added absoluteURI support If requests go through a proxy, they will have the original uri in the request, i.e. : GET http://proxy.server.uri/some/query/string HTTP 1.1 ... That was problematic -- cowboy_http_protocol:request didn't know what to to with the result of decode_packet applied to this, which would be something like: ``` erlang {http_request,'GET',{absoluteURI,http,<<"proxy.server.uri">>, undefined,<<"/some/query/string">>},{1,1}} ``` So, I just ignore the host, grab the path and pass into ``` erlang cowboy_http_protocol:request({http_request, Method, {abs_path, Path}, Version}, State) ``` Seems to do the trick without much effort. --- src/cowboy_http_protocol.erl | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/cowboy_http_protocol.erl b/src/cowboy_http_protocol.erl index 4962217..d7ba508 100644 --- a/src/cowboy_http_protocol.erl +++ b/src/cowboy_http_protocol.erl @@ -113,6 +113,10 @@ wait_request(State=#state{socket=Socket, transport=Transport, request({http_request, _Method, _URI, Version}, State) when Version =/= {1, 0}, Version =/= {1, 1} -> error_terminate(505, State); +%% We still receive the original Host header. +request({http_request, Method, {absoluteURI, _Scheme, _Host, _Port, Path}, + Version}, State) -> + request({http_request, Method, {abs_path, Path}, Version}, State); request({http_request, Method, {abs_path, AbsPath}, Version}, State=#state{socket=Socket, transport=Transport, urldecode={URLDecFun, URLDecArg}=URLDec}) -> -- cgit v1.2.3