Fastream Technologies wrote: > Hello, > > But this gets very annoying--with keep-alive, users of > the proxy cannot browse more than 1 or 2 chunked encoded pages. They > see empty page since onheaderend is called after "0 \r\n". > I know in > HEAD this body part must not be sent yet this is Apache and we need > to tolerate it.
The line "FReceiveLen := 0;" should 'eat' anything that's in the receive buffer yet including the "0 \r\n". However if those junk bytes are received afterwards the connection should be aborted in SocketDataAvailable() later on, see below. > I understand all except this line: > StateChange(httpWaitingBody); //AG 05/27/08 > since this is HEAD, why do we wait for body? It's because of this: procedure THttpCli.SocketDataAvailable(Sender: TObject; ErrCode: Word); if FState = httpWaitingBody then begin if FReceiveLen > 0 then begin if FRequestType = httpHEAD then begin { 23/07/04 } { We are processing a HEAD command. We don't expect a document } { but some server send one anyway. We just throw it away and } { abort the connection } FReceiveLen := 0; FCtrlSocket.Abort; Exit; end; So I guess it should work, if not, I've currently no better idea :( -- Arno Garrels > > Francois, can you take a look at the problem please? > Best Regards, > > SZ > On Wed, May 28, 2008 at 10:35 AM, Fastream Technologies > <[EMAIL PROTECTED]> wrote: > >> I tested Arno's lastest code. It SEEMED to work in the first tries. >> YET, when you click first HEAD and then GET, (very fast), it gets >> LastResponse as "0 \r\n". After this, Onheaderend is called which >> spoils everything. That is the BIG problem. >> >> Regards, >> >> SZ >> >> On Wed, May 28, 2008 at 10:09 AM, Fastream Technologies < >> [EMAIL PROTECTED]> wrote: >> >>> Hi, >>> >>> I understand all except this line: >>> >>> StateChange(httpWaitingBody); >>> //AG 05/27/08 >>> since this is HEAD, why do we wait for body? >>> Best Regards, >>> >>> SZ >>> On Tue, May 27, 2008 at 11:03 PM, Arno Garrels >>> <[EMAIL PROTECTED]> wrote: >>> >>>> Arno Garrels wrote: >>>>> From a brief test, the server sends body data even though it got a >>>>> HEAD-request, the following modification may help? >>>> >>>> This one may work better, if not, Francois or someone with more >>>> HttpCli-experience should look at it: >>>> >>>> { FContentLength = -1 when server doesn't send a value } >>>> if ((FContentLength = -1) and { Added 12/03/2004 >>>> } (FTransferEncoding <> 'chunked') and { Added >>>> 09/10/2006 by FP } >>>> ((FStatusCode < 200) or { Added 12/03/2004 >>>> } (FStatusCode = 204) or { Added >>>> 12/03/2004 } (FStatusCode = 301) or { >>>> Added 06/10/2004 } (FStatusCode = 302) or >>>> { Added 06/10/2004 } (FStatusCode = 304) or >>>> { Added 12/03/2004 } (FStatusCode = 401) or >>>> { Added 12/28/2005 } //AG 12/28/05 >>>> (FStatusCode = 407))) { Added 12/28/2005 >>>> } //AG 12/28/05 >>>> or >>>> (FContentLength = 0) >>>> or >>>> (FRequestType = httpHEAD) then begin >>>> { TriggerHeaderEnd; }{ Removed 10/01/2004 } >>>> if {(FResponseVer = '1.0') or (FRequestVer = '1.0') >>>> or} { [rawbite 31.08.2004 Connection controll] } >>>> FCloseReq then begin >>>> if FLocationFlag then { Added >>>> 16/02/2004 } StartRelocation { >>>> Added 16/02/2004 } else begin >>>> { Added 16/02/2004 } if FRequestType = >>>> httpHEAD then begin { Added 23/07/04 } >>>> { With HEAD command, we don't expect a >>>> document } >>>> { but some server send one ! >>>> } >>>> FReceiveLen := 0; { Cancel >>>> received data } >>>> StateChange(httpWaitingBody); >>>> FNext := nil; >>>> end; >>>> FCtrlSocket.CloseDelayed; { Added >>>> 10/01/2004 } end; >>>> end >>>> else if FRequestType = httpHEAD then begin >>>> //AG 05/27/08 >>>> { With HEAD command, we don't expect a document >>>> } //AG 05/27/08 >>>> { but some server send one ! >>>> } //AG 05/27/08 >>>> FReceiveLen := 0; { Cancel received data >>>> } //AG 05/27/08 >>>> StateChange(httpWaitingBody); >>>> //AG 05/27/08 >>>> FNext := nil; >>>> //AG 05/27/08 >>>> SetReady; >>>> end; >>>> //AG 05/27/08 >>>> Exit; >>>> end; >>>> DocExt := LowerCase(ExtractFileExt(FDocName)); >>>> >>>> -- >>>> To unsubscribe or change your settings for TWSocket mailing list >>>> please goto >>>> http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit >>>> our website at http://www.overbyte.be -- To unsubscribe or change your settings for TWSocket mailing list please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be