Ich habe gerade ewig nach einem sehr komischen Problem gesucht: Ein Soap-Client baut die Verbindung zum Magento SOAP-Webservice auf und möchte die Produktdaten abrufen. Login funktioniert super, aber danach bricht die Verbindung einfach ab und man bekommt eine Fehlermeldung, dass die Header nicht gelesen werden können (oder sowas in der Art). Sehr seltsam.
Nachdem ich die komplette Magento-Installation auseinander genommen habe, habe ich die Schnittstelle gegen den Server mit SoapUI getestet – hier habe ich sofort eine Liste mit Produkten bekommen. Na toll – was ist das denn für ein Problem?
Nach einer Zeit bin ich darauf gekommen, das fehlerhafte PHP-Script einmal bei mir lokal auszuführen. Auch hier habe ich sofort eine Produktliste zurück bekommen. Seltsam!
Nach langen Recherchen bin ich darauf gekommen, dass der Connection-Parameter im Header auf „keep-alive“ steht. Durch einen etwas länger dauernden Request sendet der Webserver scheinbar zwischendurch einfach ein keep-alive zurück. Das Ganze muss also irgendwie vom Apache stammen.
Danach fand ich in der .htaccess von Magento folgenden Eintrag:
<IfModule mod_headers.c> Header set Connection keep-alive </IfModule>
Nachdem ich diesen auf „close“ geändert hatte, lief alles wie gewünscht.
Was lernen wir? Der SoapClient mag keep-alive-Verbindungen nicht besonders. Das finde ich allerdings etwas komisch, da der Code mit den selben Server-Settings bei mir lokal ja lief. Ich weiß jedenfalls beim nächsten Mal sehr viel eher wonach ich suchen muss, um ein ähnliches Problem zu lösen.