Browse Source

Fix ssl_hello_world example; document HTTP/2 output

Loïc Hoguin 9 years ago
parent
commit
25912dfc05

+ 1 - 0
examples/ssl_hello_world/Makefile

@@ -3,6 +3,7 @@ PROJECT_DESCRIPTION = Cowboy SSL Hello World example
 PROJECT_VERSION = 1
 
 DEPS = cowboy
+LOCAL_DEPS = ssl
 dep_cowboy_commit = master
 
 include ../../erlang.mk

+ 60 - 2
examples/ssl_hello_world/README.asciidoc

@@ -1,4 +1,4 @@
-= Hello world example
+= Secure hello world example
 
 To try this example, you need GNU `make` and `git` in your PATH.
 
@@ -12,7 +12,10 @@ Then point your browser to https://localhost:8443
 You will need to temporarily trust the root certificate authority,
 which can also be found in `priv/ssl/cowboy-ca.crt`.
 
-== Example output
+Recent browsers will communicate using HTTP/2. Older browsers
+will use HTTP/1.1.
+
+== HTTP/1.1 example output
 
 [source,bash]
 ----
@@ -25,3 +28,58 @@ content-length: 12
 
 Hello world!
 ----
+
+== HTTP/2 example output
+
+[source,bash]
+----
+$ nghttp -v https://localhost:8443
+[  0.001] Connected
+The negotiated protocol: h2
+[  0.009] recv SETTINGS frame <length=0, flags=0x00, stream_id=0>
+          (niv=0)
+[  0.009] send SETTINGS frame <length=12, flags=0x00, stream_id=0>
+          (niv=2)
+          [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
+          [SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
+[  0.009] send SETTINGS frame <length=0, flags=0x01, stream_id=0>
+          ; ACK
+          (niv=0)
+[  0.009] send PRIORITY frame <length=5, flags=0x00, stream_id=3>
+          (dep_stream_id=0, weight=201, exclusive=0)
+[  0.009] send PRIORITY frame <length=5, flags=0x00, stream_id=5>
+          (dep_stream_id=0, weight=101, exclusive=0)
+[  0.009] send PRIORITY frame <length=5, flags=0x00, stream_id=7>
+          (dep_stream_id=0, weight=1, exclusive=0)
+[  0.009] send PRIORITY frame <length=5, flags=0x00, stream_id=9>
+          (dep_stream_id=7, weight=1, exclusive=0)
+[  0.009] send PRIORITY frame <length=5, flags=0x00, stream_id=11>
+          (dep_stream_id=3, weight=1, exclusive=0)
+[  0.009] send HEADERS frame <length=38, flags=0x25, stream_id=13>
+          ; END_STREAM | END_HEADERS | PRIORITY
+          (padlen=0, dep_stream_id=11, weight=16, exclusive=0)
+          ; Open new stream
+          :method: GET
+          :path: /
+          :scheme: https
+          :authority: localhost:8443
+          accept: */*
+          accept-encoding: gzip, deflate
+          user-agent: nghttp2/1.7.1
+[  0.010] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
+          ; ACK
+          (niv=0)
+[  0.010] recv (stream_id=13) :status: 200
+[  0.010] recv (stream_id=13) content-length: 12
+[  0.010] recv (stream_id=13) content-type: text/plain
+[  0.010] recv (stream_id=13) date: Sat, 30 Apr 2016 12:54:32 GMT
+[  0.010] recv (stream_id=13) server: Cowboy
+[  0.010] recv HEADERS frame <length=45, flags=0x04, stream_id=13>
+          ; END_HEADERS
+          (padlen=0)
+          ; First response header
+Hello world![  0.010] recv DATA frame <length=12, flags=0x01, stream_id=13>
+          ; END_STREAM
+[  0.010] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
+          (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])
+----

+ 1 - 1
examples/ssl_hello_world/src/ssl_hello_world_app.erl

@@ -22,7 +22,7 @@ start(_Type, _Args) ->
 		{cacertfile, PrivDir ++ "/ssl/cowboy-ca.crt"},
 		{certfile, PrivDir ++ "/ssl/server.crt"},
 		{keyfile, PrivDir ++ "/ssl/server.key"}
-	], #{env, [{dispatch, Dispatch}]}),
+	], #{env => #{dispatch => Dispatch}}),
 	ssl_hello_world_sup:start_link().
 
 stop(_State) ->

+ 4 - 4
examples/ssl_hello_world/src/toppage_handler.erl

@@ -6,7 +6,7 @@
 -export([init/2]).
 
 init(Req, Opts) ->
-	Req2 = cowboy_req:reply(200, [
-		{<<"content-type">>, <<"text/plain">>}
-	], <<"Hello world!">>, Req),
-	{ok, Req2, Opts}.
+	cowboy_req:reply(200, #{
+		<<"content-type">> => <<"text/plain">>
+	}, <<"Hello world!">>, Req),
+	{ok, Req, Opts}.