From 25912dfc05e45e0f4453f689410fce80a1af69ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sat, 30 Apr 2016 14:58:32 +0200 Subject: Fix ssl_hello_world example; document HTTP/2 output --- examples/ssl_hello_world/Makefile | 1 + examples/ssl_hello_world/README.asciidoc | 62 +++++++++++++++++++++- .../ssl_hello_world/src/ssl_hello_world_app.erl | 2 +- examples/ssl_hello_world/src/toppage_handler.erl | 8 +-- 4 files changed, 66 insertions(+), 7 deletions(-) diff --git a/examples/ssl_hello_world/Makefile b/examples/ssl_hello_world/Makefile index 34c3201..47676a9 100644 --- a/examples/ssl_hello_world/Makefile +++ b/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 diff --git a/examples/ssl_hello_world/README.asciidoc b/examples/ssl_hello_world/README.asciidoc index d3fcf77..70ee7f8 100644 --- a/examples/ssl_hello_world/README.asciidoc +++ b/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 + (niv=0) +[ 0.009] send SETTINGS frame + (niv=2) + [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] + [SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535] +[ 0.009] send SETTINGS frame + ; ACK + (niv=0) +[ 0.009] send PRIORITY frame + (dep_stream_id=0, weight=201, exclusive=0) +[ 0.009] send PRIORITY frame + (dep_stream_id=0, weight=101, exclusive=0) +[ 0.009] send PRIORITY frame + (dep_stream_id=0, weight=1, exclusive=0) +[ 0.009] send PRIORITY frame + (dep_stream_id=7, weight=1, exclusive=0) +[ 0.009] send PRIORITY frame + (dep_stream_id=3, weight=1, exclusive=0) +[ 0.009] send HEADERS frame + ; 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 + ; 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 + ; END_HEADERS + (padlen=0) + ; First response header +Hello world![ 0.010] recv DATA frame + ; END_STREAM +[ 0.010] send GOAWAY frame + (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[]) +---- diff --git a/examples/ssl_hello_world/src/ssl_hello_world_app.erl b/examples/ssl_hello_world/src/ssl_hello_world_app.erl index 0338baf..ba42b24 100644 --- a/examples/ssl_hello_world/src/ssl_hello_world_app.erl +++ b/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) -> diff --git a/examples/ssl_hello_world/src/toppage_handler.erl b/examples/ssl_hello_world/src/toppage_handler.erl index e8e672e..eb95bf3 100644 --- a/examples/ssl_hello_world/src/toppage_handler.erl +++ b/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}. -- cgit v1.2.3