aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorFred Hebert <[email protected]>2014-01-14 13:30:58 -0500
committerFred Hebert <[email protected]>2014-07-14 10:11:03 -0400
commitb10b34a8f204ed409a6fc936e199557bfe3b0975 (patch)
treed911ecf2b32464ef67a12f02dec809300686dc42 /test
parent9980348a1cd74a41b3024f0b01d6fef301d8288b (diff)
downloadcowboy-b10b34a8f204ed409a6fc936e199557bfe3b0975.tar.gz
cowboy-b10b34a8f204ed409a6fc936e199557bfe3b0975.tar.bz2
cowboy-b10b34a8f204ed409a6fc936e199557bfe3b0975.zip
Support ad-hoc keep-alive for HTTP/1.0 Clients
Only go for keep-alive if they submit a 'connection: keep-alive' header in the request, keep behaviour the same otherwise. The new RFC 7230 (http://tools.ietf.org/html/rfc7230#section-6.3) states: If the received protocol is HTTP/1.0, the "keep-alive" connection option is present, the recipient is not a proxy, and the recipient wishes to honor the HTTP/1.0 "keep-alive" mechanism, the connection will persist after the current response; Even though clients are discouraged from doing so in Appendix A.1.2 (http://tools.ietf.org/html/rfc7230#appendix-A.1.2)
Diffstat (limited to 'test')
-rw-r--r--test/http_SUITE.erl28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl
index e5a9256..0417ad0 100644
--- a/test/http_SUITE.erl
+++ b/test/http_SUITE.erl
@@ -426,6 +426,34 @@ http10_hostless(Config) ->
[{port, Port10}|Config]),
cowboy:stop_listener(http10_hostless).
+http10_keepalive_default(Config) ->
+ Normal = "GET / HTTP/1.0\r\nhost: localhost\r\n\r\n",
+ Client = raw_open(Config),
+ ok = raw_send(Client, Normal),
+ case catch raw_recv_head(Client) of
+ {'EXIT', _} -> error(closed);
+ _ -> ok
+ end,
+ ok = raw_send(Client, Normal),
+ case catch raw_recv_head(Client) of
+ {'EXIT', _} -> closed;
+ _ -> error(not_closed)
+ end.
+
+http10_keepalive_forced(Config) ->
+ Keepalive = "GET / HTTP/1.0\r\nhost: localhost\r\nConnection: keep-alive\r\n\r\n",
+ Client = raw_open(Config),
+ ok = raw_send(Client, Keepalive),
+ case catch raw_recv_head(Client) of
+ {'EXIT', _} -> error(closed);
+ _ -> ok
+ end,
+ ok = raw_send(Client, Keepalive),
+ case catch raw_recv_head(Client) of
+ {'EXIT', Err} -> error({closed, Err});
+ _ -> ok
+ end.
+
keepalive_max(Config) ->
{ConnPid, MRef} = gun_monitor_open(Config),
Refs = [gun:get(ConnPid, "/", [{<<"connection">>, <<"keep-alive">>}])