[Libevent-users] Re: No Date header in HTTP/1.1 response
Elliot Foster
elliotf-libevent at gratuitous.net
Wed Aug 22 15:27:16 EDT 2007
Ralph Moritz wrote:
> Good point.After submitting this,I also realized that I forgot to
> check the return value of strftime().
For that matter, why limit it to 1.1? 1.0 allows the Date header as well
(RFC1945, 10.6). Also, thank you for adding this.
> On 8/22/07, Chris Ross <cross at distal.com> wrote:
>> If you're building a Date header anyway, why not go ahead and do
>> it in the case of 100 and 101, as well? It says it's permitted,
>> simply not required, so I don't see any significant value in special-
>> casing those two response codes...
>>
>> - Chris
>>
>> On Aug 22, 2007, at 12:51, Ralph Moritz wrote:
>>> Hi,
>>>
>>> according to RFC 2616:
>>>
>>> Origin servers MUST include a Date header field in all responses,
>>> except in these cases:
>>>
>>> 1. If the response status code is 100 (Continue) or 101
>>> (Switching
>>> Protocols), the response MAY include a Date header field, at
>>> the server's option.
>>>
>>> 2. If the response status code conveys a server error, e.g. 500
>>> (Internal Server Error) or 503 (Service Unavailable), and
>>> it is
>>> inconvenient or impossible to generate a valid Date.
>>>
>>> 3. If the server does not have a clock that can provide a
>>> reasonable approximation of the current time, its responses
>>> MUST NOT include a Date header field. In this case, the rules
>>> in section 14.18.1 MUST be followed.
>>>
>>> So I've modified `evhttp_make_header_response' appropriately. Patch
>>> below:
>>>
>>> --- http.c.bak 2007-08-16 06:50:57.000000000 +0200
>>> +++ http.c 2007-08-22 18:48:42.000000000 +0200
>>> @@ -366,6 +366,25 @@ evhttp_make_header_response(struct evhtt
>>> evhttp_add_header(req->output_headers,
>>> "Content-Length", len);
>>> }
>>> +
>>> + /*
>>> + * Add required Date header to HTTP/1.1 responses.
>>> + * (Except those with status 100/1)
>>> + */
>>> + if ((req->major == 1)
>>> + && (req->minor == 1)
>>> + && (req->response_code != 100)
>>> + && (req->response_code != 101)) {
>>> + static char date[50];
>>> + static struct tm cur;
>>> + time_t t = time(NULL);
>>> +
>>> + gmtime_r(&t, &cur);
>>> + strftime(date, sizeof(date),
>>> + "%a, %d %b %Y %H:%M:%S GMT", &cur);
>>> + evhttp_add_header(req->output_headers,
>>> + "Date", date);
>>> + }
>>> }
>>>
>>> /* if the request asked for a close, we send a close, too */
>>>
>>>
>>> --
>>> Ralph Moritz
>>> Ph: +27 84 626 9070
>>> GPG Public Key: http://ralphm.info/public.gpg
>>> _______________________________________________
>>> Libevent-users mailing list
>>> Libevent-users at monkey.org
>>> http://monkey.org/mailman/listinfo/libevent-users
>>
>
>
More information about the Libevent-users
mailing list