Ich habe festgestellt, dass bei den Verbindungen die hängen bzw. einfrieren das Ereignis OnHandleRequest nicht aufgerufen wird. Deshalb glaube ich, dass der Fehler beim Parsen von Http-Request sein könnte. Es gibt immer Hackversuche, viele versuchen Standard Wordpress, PHPMyAdmin und andere Hacks und Lücken.
Wenn ich PortExport die hängende Verbindungen bei Abuseipdb nachschaue, dann steht dahinter immer Hacker.
Ich habe ein Bugreport erstellt, aber Michael konnte auch die Ursache nicht finden.
Ich jetzt den Server extrem vereinfacht, aber es reagiert immer noch nach einiger Zeit nicht mehr.
Weiß jemand was ich falsch mache oder was ich besser machen könnte?
Das ist mein derzeitiger Server:
Code: Alles auswählen
{ fpHttpServer demo
Based up on: fpc\3.2.0\source\packages\fcl-web\examples\httpserver\simplehttpserver.lpi
Start lazarus\tools\debugserver\debugserver for logs
}
program httptestserver1;
{$mode objfpc}{$H+}
{$IfNDef WINDOWS}
{$define UseCThreads}
{$EndIf WINDOWS}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
sysutils, Classes, fphttpserver, fpmimetypes
//, dbugintf //for log
;
type
{ TTestHTTPServer }
TTestHTTPServer = Class(TFPHTTPServer)
public
constructor Create(AOwner : TComponent); override;
procedure HandleRequest(var ARequest: TFPHTTPConnectionRequest; var AResponse : TFPHTTPConnectionResponse); override;
end;
{ TTestHTTPServer }
constructor TTestHTTPServer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Threaded:=true;
ServerBanner:='HELLO';
QueueSize:=6;
Port:=80;
end;
procedure TTestHTTPServer.HandleRequest(var ARequest: TFPHTTPConnectionRequest; var AResponse: TFPHTTPConnectionResponse);
begin
AResponse.Code:=200;
AResponse.ProtocolVersion:='HTTP/1.1';
AResponse.ContentType:='text/html';
AResponse.Content:='Hello!';
AResponse.ContentLength:=Length(AResponse.Content);
AResponse.SendContent;
AResponse.ContentStream:=Nil;
end;
var Serv: TTestHTTPServer;
begin
Serv:=TTestHTTPServer.Create(Nil);
try
//if Serv.DebLog then SendDebugEx('Serv.MimeTypesFile: '+Serv.MimeTypesFile,dlInformation); // Writeln('Serv.MimeTypesFile: '+Serv.MimeTypesFile);
Serv.Active:=True;
finally
Serv.Free;
end;
end.