Apache auf Http 1.0 einstellen

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Apache auf Http 1.0 einstellen

Postby thepande999 » 04. March 2019 19:31

Hallo zusammen,
gibt es eine Möglichkeit den Apache so einzustellen, das bei bestimmten Seiten das Http 1.0 genommen wird.

Oder kann ich den Apache so einstellen das bei einer bestimmten URL immer eine neue Verbindung aufgebaut wird. Also nicht auf eine schon vorhandene zurück gegriffen wird. Stichwort Connection: Close

Gruß und danke
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows

Re: Apache auf Http 1.0 einstellen

Postby Nobbie » 05. March 2019 10:42

Das wird im HTTP Request vom Client vorgegeben, welches Protokoll verwendet wird, da müsste Dein Browser einen HTTP Request 1.0 senden, dann sollte Apache auch so reagieren. Aber wenn der Client 1.1 angibt, wird der Server auch so reagieren.

Was ist denn das eigentliche Problem? Hast Du die Apache Doku mal auf KeepAlive durchgelesen?
Nobbie
 
Posts: 10991
Joined: 09. March 2008 13:04

Re: Apache auf Http 1.0 einstellen

Postby thepande999 » 05. March 2019 11:34

Tja, was ist mein Problem ? Ich versuche mal mein Glück.

Ich stelle ein Anfrage von Client A (per Browser oder PHP script) an einen entfernten Server (Webservice). Ich bekomme immer mal wieder (und genau das ist die Schwierigkeit) folgenden Fehler.

26-Feb-2019 20:00:16 Europe/Berlin] PHP Notice: SoapClient::__doRequest(): send of 910 bytes failed with errno=10054 Eine vorhandene Verbindung wurde vom Remotehost geschlossen.

Meine Recherche hat folgendes ergeben. Bei meiner Anfrage schicke ich folgenden HTTP Header:

POST /SIXWS/INTERN HTTP/1.1
Host: hier steht der Host
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.0.15
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 940

ich bekomme folgenden Response zurück:

HTTP/1.1 200 OK
Date: Mon, 11 Feb 2019 19:07:27 GMT
Content-Type: text/xml; charset=UTF-8
Content-Length: 000000000001170
Keep-Alive: timeout=10, max=500
Connection: Keep-Alive

Wenn ich nun erneut eine Verbindung aufbaue bekomme ich die oben beschriebene Fehlermeldung (wie gesagt immer mal wieder). Also gehe ich davon aus das mein Client versucht eine Verbindung zu nutzen die schon vom entfernten Server geschlossen wurde (wegen dem Keep-Alive timeout=10 im Response). So meine Vermutung.

Also habe ich nun den Anfrage Header wie folgt geändert:

ANFRAGEHEADER:
POST /SIXWS/INTERN HTTP/1.0
Host: hier steht der Host
Connection: close
User-Agent: PHP-SOAP/7.0.15
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 940

und bekomme nun folgenden Response zurück:

HTTP/1.0 200 OK
Date: Tue, 05 Mar 2019 05:00:16 GMT
Content-Type: text/xml; charset=UTF-8
Content-Length: 000000000001262

Damit wollte ich erreichen das mein Client immer eine neue Verbindung aufbaut und nicht eine bestehende nutzt, die schon beendet wurde.

Tja, leider ohne Erfolg. Ich bekomme weiterhin die oben beschriebene Fehlermeldung.
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows

Re: Apache auf Http 1.0 einstellen

Postby Nobbie » 05. March 2019 11:42

thepande999 wrote:Damit wollte ich erreichen das mein Client immer eine neue Verbindung aufbaut und nicht eine bestehende nutzt, die schon beendet wurde.


Wenn es so ist, dann wäre doch aber der Client das Problem, nicht der Server?! Anscheinend geht der immer von KeepAlive aus, auch wenn es gar nicht der Fall ist. Das müßte man ja im Client ändern, dass immer neue Verbindung aufgebaut wird. Vielleicht steht irgendwo ein pconnect statt eines connect oder so? Vielleicht ist es auch ein Timingproblem, das können wir hier im Forum nicht lösen.

Übrigens diese Fehlermeldung kein Fehler, nicht einmal eine Warnung, nur ein Hinweis (Notice). Ist denn danach auch Abbruch oder läuft es weiter?

P.S.:
thepande999 wrote:Ich bekomme immer mal wieder (und genau das ist die Schwierigkeit) folgenden Fehler.


Lese ich das so richtig, dass das nur hin und wieder passiert? Das ist ein Riesenunterschied, wenn das immer passiert, ist irgendwo ein Fehler drin. Wenn es nur hin und wieder geschieht, spricht das sehr für irgendeinen Timeout an irgendeiner Stelle. So etwas kann dann auch am Provider liegen und an der Leitung. Das ist noch schwerer zu finden als ein grundsätzlicher Fehler.
Nobbie
 
Posts: 10991
Joined: 09. March 2008 13:04

Re: Apache auf Http 1.0 einstellen

Postby thepande999 » 05. March 2019 12:00

Genau das ist das Problem. Von ca. 10 mal bekomme ich 3 mal die Meldung.

Aktuell habe ich den Aufruf in einer Schleife liegen. Das bedeutet sobald ich den Fehler bekomme fange ich diesen ab und rufe erneut die Verbindung auf und siehe da, danach funktioniert es.

Ich muss es halt schaffen das der Client immer eine Neue Verbindung aufbaut!!! Mehr eigentlich nicht, vorausgesetzt meine Vermutung stimmt.
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows

Re: Apache auf Http 1.0 einstellen

Postby Nobbie » 05. March 2019 14:46

thepande999 wrote:Ich muss es halt schaffen das der Client immer eine Neue Verbindung aufbaut!!! Mehr eigentlich nicht, vorausgesetzt meine Vermutung stimmt.


Ne, glaube ich nicht. Du machst ja einen POST, da gehen typischerweise viele Daten über die Leitung (beim GET gehen sie via URL, aber beim POST werden sie gesendet) und das ist ein ganz typisches Timeout Problem. Von daher ist der Ansatz, es nochmal zu senden, eigentlich nicht verkehrt. Dauerhafte Besserung verspräche allenfalls eine Absprache mit dem Server(betreiber), ob dort ggf. ein Timeout höher gesetzt werden kann. Ich habe nicht die leiseste Ahnung, was Du überhaupt gemacht wird.

Da werden irgendwelche Daten Päckchen für Päckchen gestreamed oder so und irgendwann passiert leider ein Timeout und die Leitung wird geschlossen. So sieht es für mich aus.

Du hast übrigens das zusätzliche Problem, dass Du im HTTP 1.0 Header den Host angegeben hast - das ist genau eine Schwäche von 1.0, da gab es die Host Angabe noch nicht und der Server wird das entweder ignorieren oder als unknown einstufen. Ich weiß nicht, was dann passiert, aber diese Angabe wird ja typischer für das Auffinden von VirtualHosts (NameBased) benutzt, die gehen unter HTTP 1.0 nicht. Du musst also in jedem Fall HTTP 1.1 benutzen, wenn Du den Host angeben musst, alles andere muss mit KeepAlive geregelt werden.
Nobbie
 
Posts: 10991
Joined: 09. March 2008 13:04

Re: Apache auf Http 1.0 einstellen

Postby thepande999 » 05. March 2019 16:31

Also meinst du das meine Vermutung daß mein Client eine bestehende abgelaufene Verbindung weiter nutzen möchte gar nicht das Problem ist?

Beim Betreiber kann ich nichts einstellen lassen, da ich nicht der einzige bin der mit dem Webservice arbeitet.

Du sagst es kann ein Timeout Problem sein, was meinst du genau damit?


Das senden mit http 1.0 war ach nur ein Versuch eine neue Verbindung zu erzwingen, da ja 1.0 immer mit Connection close sendet. Was aber auch nicht mein Problem behoben hat.
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows

Re: Apache auf Http 1.0 einstellen

Postby Nobbie » 05. March 2019 16:54

thepande999 wrote:Du sagst es kann ein Timeout Problem sein, was meinst du genau damit?


Deine Internetverbindung "stockt" nach dem Connect und bevor endlich die Daten geschickt (der Server wartet und wartet), geht zu viel Zeit verloren. Also macht der RemoteHost (= Server) die Leitung zu, keinen Bock mehr zu warten. Und dann werden die Daten endlich geschickt - aber niemand hört mehr hin. So ungefähr stelle ich mir das vor.

Es sieht ja wirklich so aus, dass der Client (Deine Software) zunächst einmal den Request an den Server schickt, aber in dem ersten Request stehen nur die Kopfdaten (POST irgendetwas, Host irgendetwas, Content-Size xyz usw.). U.a. steht da eben auch drin "KeepAlive". D.h. der Client bittet den RemoteHost darum, an der Leitung zu warten. Der RemoteHost schickt die Bestätigung, dass er einverstanden ist. Danach ist der Client wieder dran und schickt die Daten. Aber genau davor ist irgendetwas passiert, und am wahrscheinlichsten ist, dass dem RemoteHost die Lust vergangen ist. Es kann aber auch sein, dass der Server stark belastet ist und einfach nicht mehr warten will. Jedenfalls macht er die Leitung zu und deswegen kann Dein Client nichts mehr schicken.

Was Du probieren kannst (ich kenne ja auch Deinen Client nicht), dass Du NICHT im Kopf Connection: Keep-Alive angibst, ich weiß jetzt nicht, ob man das einfach weglassen kann, oder ob man einen anderen Wert angeben muss. Um dafür zu sorgen, dass sowohl der RemoteHost direkt auflegt, aber auch Dein Client auflegt und beim nächsten Connect (wenn die eigentlichen Daten geschickt werden) neu verbunden wird. Das hängt aber natürlich vom Client ab, ich weiß ja nicht was das für eine Software ist, ob das ein Browser ist oder ein Script oder was weiß ich, dass der auch wirklich einen neuen Connect macht, weil er eben weiß, dass er vorher gesagt hat, die Leitung soll geschlossen werden. Vielleicht geht es dann besser.

Insgesamt denke ich aber, ist es ein Timeout Problem und selbst wenn Du jetzt diese Logik etwas änderst, es kann auch immer noch passieren, dass der 2. Connect in die Binsen geht, einfach weil die Leitung nicht steht, das kommt ja vor, dass das Internet überlastet ist. Irgendwann ist es den Teilnehmern (auch dem Client) zu lahm und er gibt auf.

Das hat man ja beim alltäglichen Browsen genauso, hin und wieder kommt es vor, dass eine Seite "nicht erreichbar" ist. Da passiert genau dasselbe, Dein Browser wartet zu lange auf die Antwort des Servers und hat keine Lust mehr. Schickst Du es ein paar Sekunden später nochmal ab, klappt es vielleicht, der Engpass ist weg. Hier ist nur die Reihenfolge anders, die beiden haben sich schon verständigt und der Server wartet ... und wartet ... und wartet ... und legt auf. Und dann legt Dein Client los, und bemerkt, dass der RemoteHost leider aufgelegt hat. Genau das ist die Fehlermeldung.

P.S.: Du hast ja in der Fehlermeldung einen Timestamp (26-Feb-2019 20:00:16) und Du hast einen Timestamp, wenn der RemoteHost zuletzt geantwortet hat (HTTP/1.1 200 OK Date: Mon, 11 Feb 2019 19:07:27 GMT), wobei hier die Meldungen nicht zusammen gehören. Aber theoretisch kannst Du daraus erkennen, wieviel Zeit zwischen Request, Antwort und dem Fehlversuch vergangen ist, WENN die Uhren alle stimmen (auch nicht selbstverständlich). Vielleicht kannst Du ja daran erkennen, wie lange der Server warten musste.
Nobbie
 
Posts: 10991
Joined: 09. March 2008 13:04

Re: Apache auf Http 1.0 einstellen

Postby thepande999 » 05. March 2019 17:06

Also könnte es auch so sein. Der Client schickt eine Anfrage und fragt per Keep alive ob der Server wartet. Der Server sagt ja ich warte 5 Minuten. Jetzt schickt der Client die nächsten Daten und auf einmal hat der Server meine Lust mehr und beendet die Verbindung obwohl er warten müsste?

Hab du das so richtig verstanden obwohl ich mich dann Frage warum der zweite Aufruf direkt nach dem ersten Fehlversuch funktioniert?
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows

Re: Apache auf Http 1.0 einstellen

Postby Nobbie » 05. March 2019 17:25

thepande999 wrote:Also könnte es auch so sein. Der Client schickt eine Anfrage und fragt per Keep alive ob der Server wartet. Der Server sagt ja ich warte 5 Minuten.


Ne. Der Server wartet höchstens 10 Sekunden, so steht es im Request (Keep-Alive: timeout=10, max=500). Irgendwann schickt der Client dann die Daten (aus Sicht des Clients vielleicht sofort, aber wenn die Verbindung klemmt, kommen die Daten nicht beim Server an). Und wenn die 10 Sekunden herum sind, legt der Server auf. Die 10 Sekunden laufen SOFORT los, wenn der Server die 1. Antwort verschickt. Schon die Laufzeit dieser Antwort geht auf die Timeout-Zeit. Kann ja auch da schon etwas klemmen.

thepande999 wrote:obwohl ich mich dann Frage warum der zweite Aufruf direkt nach dem ersten Fehlversuch funktioniert?


Weil es da besser läuft, es passiert ja relativ selten. Ich kann es nicht ändern, aber es kann kaum eine andere Ursache haben als Timeout Probleme.
Nobbie
 
Posts: 10991
Joined: 09. March 2008 13:04

Re: Apache auf Http 1.0 einstellen

Postby thepande999 » 05. March 2019 17:42

So wie du das geschrieben hast, ist es also ein normales Verhalten und es kann immer Mal wieder passieren. Mal Tagelang ohne Probleme und dann wiede rmal mit Timeouts.

Dann ist mein workaround beim Timeout den Aufruf einfach nochmal zu starten der richtige und eigentlich einzige Weg.
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows

Re: Apache auf Http 1.0 einstellen

Postby Nobbie » 05. March 2019 21:11

Vielleicht.

Das ist der Nachteil, wenn man Nullkommanull zur Anwendung erklärt. Du kannst Dir anscheinend nicht vorstellen, wie unmöglich es ist, richtig zu helfen, wenn man NICHTS weiß. Das ist so, als wenn ich zu Dir sagen würde, an meinen Fernseher geht etwas nicht, weißt Du, woran das liegt?
Nobbie
 
Posts: 10991
Joined: 09. March 2008 13:04

Re: Apache auf Http 1.0 einstellen

Postby thepande999 » 06. March 2019 06:35

Da gebe ich dir Recht. Aber du kannst dir auch vorstellen das ich bevor ich ein Forum befrage schon einiges versucht und recherchiert habe. Ich befasse mich schon seit Monaten mit diesem Problem. Es ist immer sehr schwierig ein Problem zu beschreiben das immer Mal wieder sporadisch Auftritt und das dann noch schriftlich in einem Forum. Es ist immer einfacher wenn es sich um ein Problem handelt was auf ein Scriptfehler Deuter. Da postet man einfach den Code und fertig.

Bei meinem Problem kann es an allem liegen, ich kann schlecht meine ganze Umgebung Netzwerk, Schnittstellen etc. Posten.

Aber du hast mir auf jeden Fall weiter geholfen.

Danke dafür
thepande999
 
Posts: 8
Joined: 04. March 2019 19:22
XAMPP version: PHP 5.6
Operating System: Windows


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 11 guests