AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi HTTPServer mit IPv6 langsam
Thema durchsuchen
Ansicht
Themen-Optionen

HTTPServer mit IPv6 langsam

Ein Thema von paresy · begonnen am 23. Feb 2010 · letzter Beitrag vom 24. Feb 2010
Antwort Antwort
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#1

HTTPServer mit IPv6 langsam

  Alt 23. Feb 2010, 11:45
Version:
Delphi 2007 mit Indy SVN (rev. 4065), Vista/Windows7 getestet

Problem:
Sofern IPv6 auf dem System aktiviert ist und der User per Hostnamen (z.B. ipsvm) auf dem Server zugreifen will, gibt es eine Verzögerung um 1 Sekunde pro Request. Direkter Zugriff (z.B. 127.0.0.1) funktioniert problemlos. Nachstellen kann man das am einfachsten mit Chrome, der für alle Anfragen eine Zeitleiste angibt (siehe Screenshot).

Workaround für Firefox ist das deaktiveren von IPv6 DNS Lookups oder deaktivieren von IPv6 auf allen Netzwerkadaptern.

Demo Programm:
Form + HTTPServer (Active = True)

Delphi-Quellcode:
procedure TForm4.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin

 if ARequestInfo.Document = '/then
  begin
   AResponseInfo.ResponseNo := 200;
   AResponseInfo.ContentText := '<html><head><link rel="stylesheet" type="text/css" href="/a.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/b.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/c.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/d.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/e.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/f.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/g.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/h.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/i.css"/>' +
                                 '<link rel="stylesheet" type="text/css" href="/j.css"/></head><body>asd</body></html>';
  end
 else
  AResponseInfo.ResponseText := 'asd';

end;
Es wäre super, falls jemand einen Tipp hat, was ich machen muss, damit das Problem nicht auftritt!?

Grüße,
paresy
Miniaturansicht angehängter Grafiken
latency_128.png  
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: HTTPServer mit IPv6 langsam

  Alt 23. Feb 2010, 14:32
Hallo paresy,

Du bist ja einer Genau die Problematik hatten wir nämlich letzte Woche auch im Büro! Leider gibt es meines Wissens nichts, was Du auf Anwendungsebene machen kannst: Wie Du am Fix für den Firefox schon siehst, ist das Problem das IPv6 DNS Resolving auf Client bzw. OS Ebene (TCP/IP Stack): Das DNS Resolving wird nicht vom Indy HTTP Server durchgeführt. Wenn Du z.B. Chrome oder den FF nimmst und die feste IP des Servers eingibst, sind die Requests ja schnell.

Abhilfe also nur IPv6 aus, oder z.B. einen Host-Eintrag am Client (im Intranet z.B. per GPO).

Gruß,
Assertor

Frederik
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#3

Re: HTTPServer mit IPv6 langsam

  Alt 23. Feb 2010, 14:44
Ich hab das Problem seit ein paar Wochen (und es ist durch irgendeine Revision seitens Indy gekommen - vermutlich verschlimmbessernder IPv6 support) - Im Herbst letzten Jahres lief derselbe Code nämlich 1A.

Aber nachdem ich heute den Post geschrieben habe, hab ich durch Zufall, wie immer, eine Idee gehabt, die das Problem löst. Mal sehen wie gut - Konnte nur kurz testen.

Füge bei Indy bei den Bindings beides hinzu -> IPv4 und IPv6, dann umgehst du das Problem, indem du Indy einfach auf IPv6 reagieren lässt, wenn verfügbar und falls es das nicht gibt, nutzt er einfach IPv4. Funktioniert bis jetzt tadellos.

Hat Indy eine Funktion um einen IPv4 in eine IPv6 Adresse zu konvertieren?

paresy
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: HTTPServer mit IPv6 langsam

  Alt 23. Feb 2010, 15:03
Das Problem ist der DNS Server die meisten (fast alle) Router können keine IPV6 und können somit keine IPV6 Anfragen verarbeiten,
wenn man jetzt z.b. eine Windows Server hat muss man dort Extra IPV6 aktiveren (für den DNS Server)
Die Hosts Datei zu ändern ist eine nicht sehr schöne Möglichkeit die Schwächen des DNS Server zu umgehen.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: HTTPServer mit IPv6 langsam

  Alt 23. Feb 2010, 15:24
Zitat von paresy:
Ich hab das Problem seit ein paar Wochen (und es ist durch irgendeine Revision seitens Indy gekommen - vermutlich verschlimmbessernder IPv6 support) - Im Herbst letzten Jahres lief derselbe Code nämlich 1A.
Wundert mich, denn am IPv6 Support wurde meines Wissens seeeeeehr lange nichts in Indy geändert. Die SVN Kommentare, die zuletzt IPv6 bzw IPv4 enthielten, sind von 2007.

Aber: Du hast recht! Indy bindet per Default an IPv4, konnte IPv6 nicht binden. Es gab einen Fehler in der SupportsIPv6 Funktion.

Test mal bitte folgendes:

In IdStackWindows.pas:

Delphi-Quellcode:
function TIdStackWindows.SupportsIPv6: Boolean;
var
  LLen : LongWord;
  LPInfo, LPCurPtr: LPWSAPROTOCOL_INFO;
  LCount : Integer;
  i : Integer;
begin
  Result := False;
  LLen := 0;
  // Note: WSAEnumProtocols returns -1 when called just to get the needed Buffer Size!
  if (IdWinsock2.WSAEnumProtocols(nil, nil, LLen) = SOCKET_ERROR) and (LLen > 0) then // Änderung
  begin
  ...
@franktron: Du hast auch Recht, gerade die Host-Datei sollte wirklich nur eine sehr seltene Ausnahme darstellen.

Gruß,
Assertor

Edit: Getestet, läuft und ist nun im Indy SVN
Frederik
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#6

Re: HTTPServer mit IPv6 langsam

  Alt 23. Feb 2010, 19:43
Dein Fix sieht gut aus.

paresy
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#7

Re: HTTPServer mit IPv6 langsam

  Alt 24. Feb 2010, 10:31
Zitat von paresy:
Dein Fix sieht gut aus.
Freut mich und Danke fürs Reporten!

Gruß,
Assertor
Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz