From 0fc33c53001e577f52377c520ec8199b9a0682f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 30 Mar 2020 14:54:48 +0200 Subject: Add more headers to cowboy_req:parse_header/2,3 --- doc/src/manual/cowboy_req.parse_header.asciidoc | 64 ++++++++++++++++++++++++- src/cowboy_req.erl | 8 ++++ 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/doc/src/manual/cowboy_req.parse_header.asciidoc b/doc/src/manual/cowboy_req.parse_header.asciidoc index 2f8ec36..0a7406d 100644 --- a/doc/src/manual/cowboy_req.parse_header.asciidoc +++ b/doc/src/manual/cowboy_req.parse_header.asciidoc @@ -80,7 +80,25 @@ Value :: binary() %% case insensitive Quality :: 0..1000 ---- -.authorization +.access-control-request-headers +[source,erlang] +---- +parse_header(<<"access-control-request-headers">>, Req) + -> [Header] + +Header :: binary() %% case insensitive +---- + +.access-control-request-method +[source,erlang] +---- +parse_header(<<"access-control-request-method">>) + -> Method + +Method :: binary() %% case sensitive +---- + +.authorization and proxy-authorization [source,erlang] ---- parse_header(<<"authorization">>, Req) @@ -91,6 +109,16 @@ parse_header(<<"authorization">>, Req) // @todo Currently also parses connection. Do we want this? Should it be documented? Use case? +.content-encoding and content-language +[source,erlang] +---- +parse_header(Name, Req) -> [Value] + +Name :: <<"content-encoding">> + | <<"content-language">> +Value :: binary() %% case insensitive +---- + .content-length [source,erlang] ---- @@ -152,7 +180,27 @@ OpaqueTag :: binary() %% case sensitive parse_header(Name, Req) -> calendar:datetime() ---- -.range +.max-forwards +[source,erlang] +---- +parse_header(<<"max-forwards">>, Req) -> non_neg_integer() +---- + +.origin +[source,erlang] +---- +parse_header(<<"origin">>, Req) + -> [{Scheme, Host, Port} | GUID] + +Scheme :: <<"http">> | <<"https">> +Host :: binary() %% case insensitive +Port :: 0..65535 +GUID :: reference() +---- + +Cowboy generates a reference in place of a GUID when the URI +uses an unsupported uri-scheme or is not an absolute URI. + [source,erlang] ---- parse_header(<<"range">>, Req) -> {From, To} | Final @@ -184,6 +232,14 @@ Name :: <<"sec-websocket-protocol">> Token :: binary() %% case insensitive ---- +.trailer +[source,erlang] +---- +parse_header(Name, Req) -> [Header] + +Header :: binary() %% case insensitive +---- + .x-forwarded-for [source,erlang] ---- @@ -197,6 +253,10 @@ header Cowboy does not currently understand. == Changelog +* *2.8*: The function now parses `access-control-request-headers`, + `access-control-request-method`, `content-encoding`, + `content-language`, `max-forwards`, `origin`, + `proxy-authorization` and `trailer`. * *2.0*: Only the parsed header value is returned, it is no longer wrapped in a tuple. * *1.0*: Function introduced. diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl index 8c60698..a2eadfc 100644 --- a/src/cowboy_req.erl +++ b/src/cowboy_req.erl @@ -421,8 +421,12 @@ parse_header_fun(<<"accept">>) -> fun cow_http_hd:parse_accept/1; parse_header_fun(<<"accept-charset">>) -> fun cow_http_hd:parse_accept_charset/1; parse_header_fun(<<"accept-encoding">>) -> fun cow_http_hd:parse_accept_encoding/1; parse_header_fun(<<"accept-language">>) -> fun cow_http_hd:parse_accept_language/1; +parse_header_fun(<<"access-control-request-headers">>) -> fun cow_http_hd:parse_access_control_request_headers/1; +parse_header_fun(<<"access-control-request-method">>) -> fun cow_http_hd:parse_access_control_request_method/1; parse_header_fun(<<"authorization">>) -> fun cow_http_hd:parse_authorization/1; parse_header_fun(<<"connection">>) -> fun cow_http_hd:parse_connection/1; +parse_header_fun(<<"content-encoding">>) -> fun cow_http_hd:parse_content_encoding/1; +parse_header_fun(<<"content-language">>) -> fun cow_http_hd:parse_content_language/1; parse_header_fun(<<"content-length">>) -> fun cow_http_hd:parse_content_length/1; parse_header_fun(<<"content-type">>) -> fun cow_http_hd:parse_content_type/1; parse_header_fun(<<"cookie">>) -> fun cow_cookie:parse_cookie/1; @@ -432,10 +436,14 @@ parse_header_fun(<<"if-modified-since">>) -> fun cow_http_hd:parse_if_modified_s parse_header_fun(<<"if-none-match">>) -> fun cow_http_hd:parse_if_none_match/1; parse_header_fun(<<"if-range">>) -> fun cow_http_hd:parse_if_range/1; parse_header_fun(<<"if-unmodified-since">>) -> fun cow_http_hd:parse_if_unmodified_since/1; +parse_header_fun(<<"max-forwards">>) -> fun cow_http_hd:parse_max_forwards/1; +parse_header_fun(<<"origin">>) -> fun cow_http_hd:parse_origin/1; +parse_header_fun(<<"proxy-authorization">>) -> fun cow_http_hd:parse_proxy_authorization/1; parse_header_fun(<<"range">>) -> fun cow_http_hd:parse_range/1; parse_header_fun(<<"sec-websocket-extensions">>) -> fun cow_http_hd:parse_sec_websocket_extensions/1; parse_header_fun(<<"sec-websocket-protocol">>) -> fun cow_http_hd:parse_sec_websocket_protocol_req/1; parse_header_fun(<<"sec-websocket-version">>) -> fun cow_http_hd:parse_sec_websocket_version_req/1; +parse_header_fun(<<"trailer">>) -> fun cow_http_hd:parse_trailer/1; parse_header_fun(<<"upgrade">>) -> fun cow_http_hd:parse_upgrade/1; parse_header_fun(<<"x-forwarded-for">>) -> fun cow_http_hd:parse_x_forwarded_for/1. -- cgit v1.2.3