[fpc-devel] fpweb is not showing the exception message [Found the problem]
michael.vancanneyt at wisa.be
michael.vancanneyt at wisa.be
Wed Apr 13 09:07:06 CEST 2011
On Tue, 12 Apr 2011, ABorka wrote:
> On 4/12/2011 01:31, ABorka wrote:
>> On 4/12/2011 00:01, michael.vancanneyt at wisa.be wrote:
>>>
>>>
>>> On Mon, 11 Apr 2011, ABorka wrote:
>>>
>>>> I was playing today with fpweb a little, and found a simply
>>>> reproducible minor problem.
>>>>
>>>> When one creates a new CGI or FCGI application and creates a simple
>>>> default action, but NOT setting the "handled := true;" within the
>>>> event handler, then some kind of exception happens within fpweb when
>>>> the action is called from the client browser, but it does not return a
>>>> full response error message page.
>>>> All that comes back to the client is:
>>>>
>>>> "<html><head><title>APPNAME: "
>>>>
>>>> where the APPNAME is the title for the application. This happens at
>>>> least for CGI and FCGI applications, not sure about Apache modules as
>>>> I did not try that.
>>>> As soon, as we have "handled := true;" there, everything is OK.
>>>> If we have "handled := false;" or simply not setting it, the above
>>>> issue happens. It seems, that there is a problem with displaying error
>>>> messages/exceptions from within fpweb internals.
>>>>
>>>> /Latest FPC and Lazarus SVN, WinXP 32bit/
>>>
>>> I cannot reproduce this at least on Linux 64 bit and Windows 2000 32bit.
>>>
>>> I am working with these things full-time at the moment, and I always get
>>> the full page.
>>>
>>> Michael.
>>
>> Yes, it works for me too in Linux 32bit.
>>
>> But not in WinXP 32bit. In fact, it seems that no matter what, the
>> response page is cut off at 30 characters. In custweb.pp of
>> .../fcl-web/base/ ,
>>
>> procedure ExceptionToHTML(S: TStrings; const E: Exception; const Title,
>> Email, Administrator: string);
>>
>> assembles the response page, and for some reason S is only 30 characters
>> maximum when it arrives to the client browser.
>> If I replace the inner part of this procedure with simply
>>
>> With S do
>> begin
>> Add('<html><head>longer than 30 characters here..........');
>> end;
>>
>> it is still cut at 30 characters. Odd :)
>>
>>
>> AB
>
> OK, found the problem:
>
> fpweb does not set the content length properly when there was an exception or
> error message, it uses the content length from the action event handler.
> For example, if we have
> ===============
> procedure TFPWebModule1.DefActionRequest(Sender: TObject; ARequest: TRequest;
> AResponse: TResponse; var Handled: Boolean);
> begin
> // Handled := true; //commented out to trigger the exception error page
> AResponse.Content := '<html><body>Yo! (F)CGI works!</body></html>';
> end;
> ===============
> fpweb will send the content length in the response headers as the length of
> the string set in the event handler which is the length of '<html><body>Yo!
> (F)CGI works!</body></html>'#13#10 in this case, and not the length of the
> error response page it constructs and sends back.
>
> Headers>
> Status: 200 OK
> Content-Length: 45
> Content-Type: text/html
>
> This is happening on Windows XP 32bit for me for both CGI and FCGI
> applications if the above example is used.
> I would not be surprised if this problem would be there in Linux too, maybe
> it is just properly displayed in the browser there, no matter what the header
> says.
Probably it more depends on the configuration of the Webserver.
As far as I know, the 'content length' header is purely optional.
In each case, I'll patch fpWeb so it sets the content length (if possible)
Michael.
More information about the fpc-devel
mailing list