aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_http_protocol.erl
diff options
context:
space:
mode:
authorDavid Kelly <[email protected]>2012-02-01 14:08:29 -0800
committerLoïc Hoguin <[email protected]>2012-02-02 20:25:23 +0100
commite7b6e2a402922724ffd668161ed1b65533b5c034 (patch)
tree1ea25f2598dfde0c7aeca66841fd9fc5b089cae5 /src/cowboy_http_protocol.erl
parent062db956535907d33c430cd87e632d2c8f746240 (diff)
downloadcowboy-e7b6e2a402922724ffd668161ed1b65533b5c034.tar.gz
cowboy-e7b6e2a402922724ffd668161ed1b65533b5c034.tar.bz2
cowboy-e7b6e2a402922724ffd668161ed1b65533b5c034.zip
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.
Diffstat (limited to 'src/cowboy_http_protocol.erl')
-rw-r--r--src/cowboy_http_protocol.erl4
1 files changed, 4 insertions, 0 deletions
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}) ->