[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [libmicrohttpd] How to disable the connection keep-alive header?
From: |
Evgeny Grin |
Subject: |
Re: [libmicrohttpd] How to disable the connection keep-alive header? |
Date: |
Sat, 23 Jan 2016 13:55:04 +0300 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
On 22.01.2016 20:27, silvioprog wrote:
> Is there some link where I can get it? I need this one to document it in
> my framework that uses MHD.
https://tools.ietf.org/html/rfc7230#page-52
- --- begin ---
A client that does not support persistent connections MUST send the
"close" connection option in every request message.
A server that does not support persistent connections MUST send the
"close" connection option in every response message that does not
have a 1xx (Informational) status code.
- --- end ---
https://tools.ietf.org/html/rfc7230#page-52
- --- begin ---
o If the "close" connection option is present, the connection will
not persist after the current response; else,
o If the received protocol is HTTP/1.1 (or later), the connection
will persist after the current response; else,
...
- --- end ---
So, if "Connection: " header is not present and protocol is HTTP/1.1 or
later, the connection must be persistent.
For better compatibility with older client MHD always add "Connection:
Keep-Alive" if persistent connection is used.
>
> I saw all headers from popular sites like Google
> <https://img42.com/dLL1P> and Facebook <https://img42.com/pUMyc>, and I
> didn't see the connection header. :-/ But it isn't a problem, because
> this sites uses HTTP 2.0, and I don't know if this one needs the
> connection header.
>
> BTW, it would be nice if the keep-alive/close value in the header could
> be chosen via some initialization flag, something like this:
>
> daemon =
> MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL, &hr, NULL,
> MHD_OPTION_CONNECTION_HEADER, "keep-alive",
> MHD_OPTION_END);
It can be implemented, but close connection will waste system resources
as clients will repeatedly disconnect/connect to server. Better use
reasonable timeout value.
> Avoiding to handle it directly in the user callback request. And more:
>
> (No declaration) -- uses MHD default, that's keep-alive
> MHD_OPTION_CONNECTION_HEADER, "keep-alive", -- set keep-alive
> MHD_OPTION_CONNECTION_HEADER, "close", -- set close
> MHD_OPTION_CONNECTION_HEADER, NULL, -- undeclares Connection header,
> so the programmer do it by own risk
>
> What do you think? :-)
Without connection header, connection must be persistent for HTTP/1.1
(and later) and must be closed for HTTP/1.0.
"keep-alive" is not MHD's default, it's HTTP default.
"Connection" header allow to explicitly signal to client connection
mode, I can't see advantages of absence such header rather than
unnoticeable traffic lowering.
- --
Best Wishes,
Evgeny Grin
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQEcBAEBCAAGBQJWo1wIAAoJEL96xKXqwrr0gSAH/15lS9c74WGUVMMivmWwLBa+
T3ONkdwUDeBYF1vMKVXXgiBZp9bjJznYBNmwS968MzJD/jX1Km9WgcJfCtg3GcmM
4c1ZOYChZTnq4l2NYocDdmV1xdVHCxcT1xozZ1Ew5fLOiki4SyALKJo68VlaQNks
GCkr0y3jh3JGOtWTH05U3NW1EQqAyg0k+1PfGRYCXLNEo41pXgc2L8yEpPw1Iei+
fFB+BqHN5Sl/LFSirqFo9Km5y/MJn3DUsfX4Oal5TBkCoj7FR3d58ArL38mJKKEu
h68wv8oieCIiUhAlPvAmrXnI9WSE72BWCLaf3Sjj0cH90MrADeXYI5ZMV8u0zvE=
=zvUe
-----END PGP SIGNATURE-----