anchor.diff:  %@todo
   %When encoding an URI as part of a response, only characters that
   %are reserved need to be percent-encoded. (RFC7230 2.7.3)
  -%
  -%special_set_cookie_handling(Config) ->
  -%The set-cookie header must be handled as a special case. There
  -%must be exactly one set-cookie header field per cookie. (RFC7230 3.2.2)
  -%
  +
  +special_set_cookie_handling(Config) ->
  +	doc("The set-cookie header must be handled as a special case. There "
  +		"must be exactly one set-cookie header field per cookie. (RFC7230 3.2.2)"),
  +	#{code := 200, headers := RespHeaders} = do_raw(Config, [
  +		"GET /resp/set_resp_cookie3/multiple HTTP/1.1\r\n"
  +		"Host: localhost\r\n"
  +		"\r\n"]),
  +	[_, _] = [H || H={<<"set-cookie">>, _} <- RespHeaders],
  +	ok.
  +
   %@todo
   %The server must list headers for or about the immediate connection
   %in the connection header field. (RFC7230 6.1)
  
positive.code: %A server can send more than one response per request only when a
  %1xx response is sent preceding the final response. (RFC7230 5.6)
  %
  %@todo
  %A server that does parallel pipelining must send responses in the
  %same order as the requests came in. (RFC7230 5.6)
  %
  %```
  %HTTP-response = status-line *( header-field CRLF ) CRLF [ message-body ]
  %```
  
negative.code: %no_body_in_204_response(Config) ->
  %no_body_in_304_response(Config) ->
  %1xx, 204 and 304 responses never include a message body. (RFC7230 3.3)
  
  same_content_length_as_get_in_head_response(Config) ->
  	doc("Responses to HEAD requests can include a content-length header. "
  		"Its value must be the same as if the request was an unconditional "
  		"GET. (RFC7230 3.3, RFC7230 3.3.1, RFC7230 3.3.2)"),
  	Client = raw_open(Config),
  	ok = raw_send(Client, [
  		"HEAD / HTTP/1.1\r\n"
  		"Host: localhost\r\n"
  		"\r\n"]),
  	{_, 200, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)),
  	{Headers, <<>>} = cow_http:parse_headers(Rest),
  	{_, <<"12">>} = lists:keyfind(<<"content-length">>, 1, Headers),
  	ok.
  
  same_transfer_encoding_as_get_in_head_response(Config) ->
  	doc("Responses to HEAD requests can include a transfer-encoding header. "
  		"Its value must be the same as if the request was an unconditional "
  		"GET. (RFC7230 3.3, RFC7230 3.3.1, RFC7230 3.3.2)"),
  	Client = raw_open(Config),
  	ok = raw_send(Client, [
  		"HEAD /resp/stream_reply2/200 HTTP/1.1\r\n"
  		"Host: localhost\r\n"
  		"\r\n"]),
  	{_, 200, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)),
  	{Headers, <<>>} = cow_http:parse_headers(Rest),
  	{_, <<"chunked">>} = lists:keyfind(<<"transfer-encoding">>, 1, Headers),
  	ok.
  
  %same_content_length_as_200_in_304_response(Config) ->
  %same_transfer_encoding_as_200_in_304_response(Config) ->
  %304 responses can include a
  %content-length or transfer-encoding header. Their value must
  %be the same as if the request was an unconditional GET. (RFC7230 3.3, RFC7230 3.3.1, RFC7230 3.3.2)
  %
  %no_content_length_in_100_response(Config) ->
  %no_content_length_in_101_response(Config) ->
  %no_content_length_in_102_response(Config) ->
  %1xx, 204 responses and "2xx responses to CONNECT requests" must
  %not include a content-length or transfer-encoding header. (RFC7230 3.3.1, RFC7230 3.3.2)
  
  no_content_length_in_204_response(Config) ->
  	doc("204 responses must not include a transfer-encoding header. "
  		"(RFC7230 3.3.1, RFC7230 3.3.2)"),
  	Client = raw_open(Config),
  	ok = raw_send(Client, [
  		"GET /resp/reply4/204 HTTP/1.1\r\n"
  		"Host: localhost\r\n"
  		"\r\n"]),
  	{_, 204, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)),
  	{Headers, <<>>} = cow_http:parse_headers(Rest),
  	false = lists:keyfind(<<"content-length">>, 1, Headers),
  	ok.
  
  %%% @todo CONNECT no_content_length_in_2xx_response_to_connect_request(Config) ->
  %no_transfer_encoding_in_100_response(Config) ->
  %no_transfer_encoding_in_101_response(Config) ->
  %no_transfer_encoding_in_102_response(Config) ->
  %1xx, 204 responses and "2xx responses to CONNECT requests" must
  %not include a content-length or transfer-encoding header. (RFC7230 3.3.1, RFC7230 3.3.2)
  
  %% We only send transfer-encoding when streaming a response body.
  %% We therefore need a streamed response in order to see a potential bug.
  no_transfer_encoding_in_204_response(Config) ->
  	doc("204 responses must not include a transfer-encoding header. "
  		"(RFC7230 3.3.1, RFC7230 3.3.2)"),
  	Client = raw_open(Config),
  	ok = raw_send(Client, [
  		"GET /resp/stream_reply2/204 HTTP/1.1\r\n"
  		"Host: localhost\r\n"
  		"\r\n"]),
  	{_, 204, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)),
  	{Headers, <<>>} = cow_http:parse_headers(Rest),
  	false = lists:keyfind(<<"transfer-encoding">>, 1, Headers),
  	ok.
  
  %%% @todo CONNECT no_transfer_encoding_in_2xx_response_to_connect_request(Config) ->
  %1xx, 204 responses and "2xx responses to CONNECT requests" must
  %not include a content-length or transfer-encoding header. (RFC7230 3.3.1, RFC7230 3.3.2)
  %
  %```
  %message-body = *OCTET
  