diff options
author | Péter Dimitrov <[email protected]> | 2018-08-27 16:18:18 +0200 |
---|---|---|
committer | Péter Dimitrov <[email protected]> | 2018-08-27 16:18:18 +0200 |
commit | 7db7a1caeeee21682f37cfa95f9f026074e03ccf (patch) | |
tree | e47255259cece7ba59140f56dbe7aa2aee45bfaa /lib/inets/src/http_client | |
parent | b47fa83ff514feafa3debe841f2697c29fa2ca49 (diff) | |
parent | ab8faff46daf24db6f20dc2a307cf68d53034450 (diff) | |
download | otp-7db7a1caeeee21682f37cfa95f9f026074e03ccf.tar.gz otp-7db7a1caeeee21682f37cfa95f9f026074e03ccf.tar.bz2 otp-7db7a1caeeee21682f37cfa95f9f026074e03ccf.zip |
Merge branch 'maint-20' into maint
* maint-20:
inets: Prepare for release
inets: Robust handling of 204, 304, 1xx responses
inets: Do not use chunked encoding with 1xx, 204, 304
Change-Id: Ia88eb1d217b46fb01b1d7544d9ef34788c87abbd
Diffstat (limited to 'lib/inets/src/http_client')
-rw-r--r-- | lib/inets/src/http_client/httpc_handler.erl | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl index 5e05b8170a..1bf5d25c98 100644 --- a/lib/inets/src/http_client/httpc_handler.erl +++ b/lib/inets/src/http_client/httpc_handler.erl @@ -961,13 +961,23 @@ handle_http_body(_, #state{status = {ssl_tunnel, Request}, NewState = answer_request(Request, ClientErrMsg, State), {stop, normal, NewState}; -handle_http_body(<<>>, #state{status_line = {_,304, _}} = State) -> +%% All 1xx (informational), 204 (no content), and 304 (not modified) +%% responses MUST NOT include a message-body, and thus are always +%% terminated by the first empty line after the header fields. +%% This implies that chunked encoding MUST NOT be used for these +%% status codes. +handle_http_body(<<>>, #state{headers = Headers, + status_line = {_,StatusCode, _}} = State) + when Headers#http_response_h.'transfer-encoding' =/= "chunked" andalso + (StatusCode =:= 204 orelse %% No Content + StatusCode =:= 304 orelse %% Not Modified + 100 =< StatusCode andalso StatusCode =< 199) -> %% Informational handle_response(State#state{body = <<>>}); -handle_http_body(<<>>, #state{status_line = {_,204, _}} = State) -> - handle_response(State#state{body = <<>>}); -handle_http_body(<<>>, #state{request = #request{method = head}} = State) -> +handle_http_body(<<>>, #state{headers = Headers, + request = #request{method = head}} = State) + when Headers#http_response_h.'transfer-encoding' =/= "chunked" -> handle_response(State#state{body = <<>>}); handle_http_body(Body, #state{headers = Headers, |