>> ??? I do not know what you mean, my GET request _has_ a content-lenght >> header! For HEAD, I just do not calculate the expencive data for my body.
that is exactly what I mean - if you include a C-L header on a GET then you are supposed to have one for a HEAD request as well, expensive or not. HEAD is supposed to be exactly the same as a GET in all respects except that it does not have a message body. >> >> I just missed the content-length header on HEAD requests that is >> delivered on GET. > > > Geoff, see the t/apache/head_request.t test I've added last night. If > you don't send a body, Apache strips the C-L header for HEAD requests. > Sending at least 1 byte works as a workaround, but it smells like a bug > in Apache. yes, clearly there is a bug in there, but not where you think - what is important is that apache needs to do the same thing on GET as HEAD, not that there is no C-L generated for contentless HEAD requests. this patch more accurately represents the real bug which, IIRC, httpd is already aware of (at least I'm recalling discussion about a C-L of 0). --Geoff
Index: t/apache/head_request.t =================================================================== RCS file: /home/cvs/modperl-2.0/t/apache/head_request.t,v retrieving revision 1.2 diff -u -r1.2 head_request.t --- t/apache/head_request.t 2 Aug 2004 03:38:30 -0000 1.2 +++ t/apache/head_request.t 2 Aug 2004 17:30:54 -0000 @@ -8,42 +8,54 @@ use Apache::TestUtil; use Apache::TestRequest; -plan tests => 12; +plan tests => 12 * 2, todo => [2,5]; my $location = "/TestApache__head_request"; -{ - # if the response handler sends no data, and sets no C-L header, - # the client doesn't get C-L header - my $res = HEAD "$location"; - ok t_cmp $res->code, 200, "code"; - ok t_cmp $res->header('Content-Length'), undef, "C-L header"; - ok t_cmp $res->content, "", "content"; -} - -{ - # if the response handler sends no data, and sets C-L header, - # the client doesn't get C-L header - my $res = HEAD "$location?set_content_length"; - ok t_cmp $res->code, 200, "code"; - ok t_cmp $res->header('Content-Length'), undef, "C-L header"; - ok t_cmp $res->content, "", "content"; -} - -{ - # if the response handler sends data, and sets no C-L header, - # the client doesn't get C-L header - my $res = HEAD "$location?send_body"; - ok t_cmp $res->code, 200, "code"; - ok t_cmp $res->header('Content-Length'), undef, "C-L header"; - ok t_cmp $res->content, "", "content"; -} - -{ - # if the response handler sends data (e.g. one char string), and - # sets C-L header, the client gets the C-L header - my $res = HEAD "$location?send_body+set_content_length"; - ok t_cmp $res->code, 200, "code"; - ok t_cmp $res->header('Content-Length'), 25, "C-L header"; - ok t_cmp $res->content, "", "content"; +no strict qw(refs); +foreach my $method qw(GET HEAD) { + + { + # if the response handler sends no data, and sets no C-L header, + # the client doesn't get C-L header + my $uri = $location; + my $res = $method->($uri); + ok t_cmp $res->code, 200, "$method $uri code"; + ok t_cmp $res->header('Content-Length'), undef, "$method $uri C-L header"; + ok t_cmp $res->content, "", "$method $uri content"; + } + + { + # if the response handler sends no data, and sets C-L header, + # the client doesn't get C-L header + my $uri = "$location?set_content_length"; + my $res = $method->($uri); + ok t_cmp $res->code, 200, "$method $uri code"; + ok t_cmp $res->header('Content-Length'), undef, "$method $uri C-L header"; + ok t_cmp $res->content, "", "$method $uri content"; + } + + { + # if the response handler sends data, and sets no C-L header, + # the client doesn't get C-L header + my $uri = "$location?send_body"; + my $res = $method->($uri); + ok t_cmp $res->code, 200, "$method $uri code"; + ok t_cmp $res->header('Content-Length'), undef, "$method $uri C-L header"; + + my $content = $method eq 'GET' ? 'This is a response string' : ''; + ok t_cmp $res->content, $content, "$method $uri content"; + } + + { + # if the response handler sends data (e.g. one char string), and + # sets C-L header, the client gets the C-L header + my $uri = "$location?send_body+set_content_length"; + my $res = $method->($uri); + ok t_cmp $res->code, 200, "$method $uri code"; + ok t_cmp $res->header('Content-Length'), 25, "$method $uri C-L header"; + + my $content = $method eq 'GET' ? 'This is a response string' : ''; + ok t_cmp $res->content, $content, "$method $uri content"; + } }
-- Report problems: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html List etiquette: http://perl.apache.org/maillist/email-etiquette.html