Thank you,
MHD_RF_HEAD_ONLY_RESPONSE was what I needed, not MHD_RF_INSANITY_HEADER_CONTENT_LENGTH. But when is the next release 9.78 which includes those commits? On Mon, Nov 6, 2023 at 12:49 PM Evgeny Grin <k...@yandex.ru> wrote: > Hi Rohit, > > On 05.11.2023 19:15, Rohit Kota wrote: > > Hello, > > We have a use case where content-length needs to be set in the response > > headers for a HEAD request. See for example:- > > > https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html#API_HeadObject_Examples > < > https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html#API_HeadObject_Examples > > > > > > According to rfc-9110 section 8.6.6 > > <https://www.rfc-editor.org/rfc/rfc9110.html#section-8.6-6> this is > > valid behaviour > > A server MAY send a Content-Length header field in a response to a HEAD > > request (Section 9.3.2 > > <https://www.rfc-editor.org/rfc/rfc9110.html#HEAD>); a server MUST > > NOT send Content-Length in such a response unless its field value equals > > the decimal number of octets that would have been sent in the content of > > a response if the same request had used the GET method. > > Your quote from RFC is absolutely correct and MHD fully follow these > recommendations. See below for more details. > > > But from what I gathered here > > < > https://lists.nongnu.org/archive/html/libmicrohttpd/2019-10/msg00037.html>, > I can set MHD_RF_INSANITY_HEADER_CONTENT_LENGTH to allow this behaviour. > > This is incorrect interpretation of the email discussion. The name of > the option MHD_RF_INSANITY_HEADER_CONTENT_LENGTH suggests incorrect > behaviour. > > > For HEAD requests, I suspect libmicrohttpd is always setting > content-length to 0. > > This is not what is written in the documentation. > For *any* request libmicrohttpd *always* set correct Content-Length that > matches application-provided response, if RFCs allow the Content-Length > header. Exceptions: 1xx and 204 response codes, where no reply body nor > Content-Length are used. > > > So for example when i set content-length to 24 manually I am getting > this. > > < HTTP/1.1 200 OK > > < Date: Sun, 05 Nov 2023 16:10:44 GMT > > < Connection: close > > < Last-Modified: Thu, 26 Oct 2023 04:42:56 GMT > > < Content-Length: 24 > > < Content-Length: 0 > > > > I suspect the extra content-length is being set by mhd. > > No. The extra "Content-Length" header with size 24 as added by > application. The application allowed to add this header because of > MHD_RF_INSANITY_HEADER_CONTENT_LENGTH flag. > See > > https://git.gnunet.org/libmicrohttpd.git/tree/src/include/microhttpd.h?h=v0.9.77#n3882 > for manually adding wrong "Content-Length" header. > The "Context-Length" with number zero is used because application > provided response with zero length. > > The next MHD release will include clearer documentation and more options. > See > > https://git.gnunet.org/libmicrohttpd.git/tree/src/include/microhttpd.h?id=cdf9b66c61a444c09ba7c9f4cee385cbd2b3bcdc#n3575 > > https://git.gnunet.org/libmicrohttpd.git/tree/src/include/microhttpd.h?id=cdf9b66c61a444c09ba7c9f4cee385cbd2b3bcdc#n3728 > > > But as per rfc I should be able to set content-length manually for a > head request. > > It is very easy: just provide the correct response object with correct > context (response body). For HEAD requests MHD will set the > "Context-Length" to the right number, but *will not* send the response > body. If the same response object is used for GET requests, MHD will set > the "Context-Length" *and* *will* send the response body. > > The idea is that response objects are unified, can be created one time > and re-used for both GET and HEAD requests freely. > > The next MHD version will provide more flexibility and special responses > that can be used only for HEAD requests. This functionality is already > in git branches. > > -- > Evgeny >