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
>

Reply via email to