Subject: Re: [htdig3-dev] size of dynamic pages
From: Gabriele Bartolini (g.bartolini@comune.prato.it)
Date: Wed Feb 09 2000 - 03:04:49 PST
Ciao talponi, how are you doing?
>
>I did find a problem in ReadChunkedBody(). It appends to the _contents
>string using "<<", rather than using
>
> _response._contents.append(buffer, rsize);
>
>as ReadBody() does. The "<<" will fail if there are any null characters
>in the buffer, which may not be a problem for text/* content types,
>but will be for binary files.
Fixed ;-)
>
>Also, ReadBody() and ReadChunkedBody() are inconsistent in the way they
>set _response._content_length & _response._document_length. ReadBody()
>doesn't even make sure _response._content_length gets set. They should
>both end with something like:
>
> _response._document_length = _response._contents.length();
>
You mean, maybe:
> if (_response._content_length < _response._document_length)
> _response._content_length = _response._document_length;
And why?
Well, as far as ReadChunkedBody() is, there's another problem. We don't use
max_document_size attribute, and I have no idea on how to use it (but
closing the connection as the size has been reached -- in this way I'll
never know how much the content-length is). That sucks ;-(
Any ideas?
>Either that, or this should be done once in HtHTTP::HTTPRequest(),
>after one or the other of the Read*Body() methods is called. I'm not
>completely clear on the chunked v. unchunked reading, but it seems to me
>this should not affect how the content length and type are processed.
>If it's guaranteed that when the body is chunked, there will be no
>Content-Length header, then I guess the comparison between _content_length
>and _document_length is not needed, and you can just set _content_length
>directly.
I found the answer ... and I hope I'll get to be clear in the explanation.
If you do 'telnet localhost 80' and type this (in order to ask for a normal
HTML page)
HEAD / HTTP/1.1
host: localhost
I received:
HTTP/1.1 200 OK
Date: Wed, 09 Feb 2000 10:37:43 GMT
Server: Apache/1.3.9 (Unix) PHP/3.0.11
Last-Modified: Fri, 04 Feb 2000 07:53:39 GMT
ETag: "3e93b-9c5-389a8583"
Accept-Ranges: bytes
Content-Length: 2501
Content-Type: text/html
In the other case, if you ask for a dynamic page, e.g. like a PHP one, by
doing 'telnet localhost 80', then:
GET /prove/prova.php3 HTTP/1.1
host: localhost
I receive this:
HTTP/1.1 200 OK
Date: Wed, 09 Feb 2000 10:40:15 GMT
Server: Apache/1.3.9 (Unix) PHP/3.0.11
Transfer-Encoding: chunked
Content-Type: text/html
5d
<HTML>
<HEAD>
<TITLE>Pagina di prova del PHP</TITLE>
</HEAD>
<BR>Nome: <BR>
</HTML>
0
As you can see, if Transfer-Encoding is set to chunked, no Content-Length
is given (how can the server send it if it doesn't know it).
Besides, if you look at HTTP1/1's RFC, chapter 4.4 "Message Lenght", point
2, you can read:
<< If a Transfer-Encoding header field is present and has any value other
than "identity", then the transfer-length is defined by use of the
"chunked" transfer-encoding, unless the message is terminated by closing
the connection. >>
And in this case, how can I determine the content-length?
Then:
<< All HTTP/1.1 applications that receive entities MUST accept the
"chunked" transfer-coding, thus allowing this mechanism to be used for
messages when the message length cannot be determined in advance. >>
Is htdig an HTTP/1.1 applications? I suppose yes ...
And finally let's get to the point:
<< Messages MUST NOT include both a Content-Length header field and a
non-identity transfer-coding. If the message does include a non-identity
transfer coding, the Content-Length MUST be ignored. >>
Any assesments and considerations?
I hope this can be useful to all of you ...
Ciao
-Gabriele
P.S.: There's an obscure side regarding Chunks, and concerns the Trailer of
the message. Maybe the server can set some header fields here. I remember I
did some attempts and I always got an empty trailer ... Probably you know
better than me and you can help me.
-------------------------------------------------
Gabriele Bartolini
Computer Programmer (are U sure?)
U.O. Rete Civica - Comune di Prato
Prato - Italia - Europa
e-mail: g.bartol@comune.prato.it
http://www.po-net.prato.it
-------------------------------------------------
Zinedine "Zizou" Zidane. Just for soccer lovers.
-------------------------------------------------
-------------------------------------------------
------------------------------------
To unsubscribe from the htdig3-dev mailing list, send a message to
htdig3-dev-unsubscribe@htdig.org
You will receive a message to confirm this.
This archive was generated by hypermail 2b28 : Wed Feb 09 2000 - 03:08:31 PST