fragen stichworte

Apache ProxyPass / RewriteRule mit p-Flag: Gibt keinen Inhalt zurück, wenn die Antwort einen mehrteiligen Inhaltstyp aufweist, d. H. Images

Dies ist eine Fortsetzung einer vorherigen Frage, die mit einer kleinen Änderung implementiert wurde. Nachfolgend die Struktur, über die ich sprechen werde. Mein Ziel ist es, den Tunnel/Proxy zu erstellen.

                        port 80                                 port 6103

Website (shared hosting) ----------> Tunnel (Dedicated hosting)  -----------> RETS Server

Ich habe die RewriteRule mit P-Flag (d. h. ProxyPass) verwendet, um die Anforderungen neu zu schreiben.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rets/server/(.*)$ http://rets-server:6103/rets/server/$1 [P]
</IfModule>

Es funktioniert sehr gut für fast alle Anforderungen (ich habe es bisher getan), mit Ausnahme derjenigen, deren Antworttyp aus mehreren Teilen besteht (oder Bildern). Es gibt Antwort 200 OK mit 0 Inhaltslänge.

Nachfolgend die Antwort, die ich ohne Verwendung des Proxys

erhalte
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< RETS-Version: RETS/1.5
< cache-control: private
< Server: StratusRETS/1.7
< MIME-Version: 1.0
< Content-Type: multipart/parallel; boundary=StratusRETS-XYZZY;charset=utf-8
< Transfer-Encoding: chunked
< Date: Tue, 24 Jul 2012 15:05:12 GMT
< --StratusRETS-XYZZY
Content-ID: E2356878
Content-Type: image/jpeg
Description: E2356878
Object-ID: 1
....

Und dann folgt die Antwort, wenn dieselbe Anfrage über den Proxy

erfolgt
< HTTP/1.1 200 OK
< Date: Tue, 24 Jul 2012 14:49:59 GMT
< Server: Apache-Coyote/1.1
< RETS-Version: RETS/1.5
< cache-control: private
< Content-Type: text/xml;charset=utf-8
< Content-Length: 0
< 

Ich habe in der httpd.conf auch ProxyPass und ProxyPassReverse verwendet. Aber kein Glück.

AKTUALISIERT: Hier sind die Bilder von Paketen mit und ohne Proxy hin und her geschickt. p.s. Schwarze Linien mit weißer Schrift werden von meiner IP-Adresse (**. 1.2) an den RETS-Server (** 5.47) gesendet und mit der Anfrage markiert.

Ohne Proxy (funktioniert gut) Without Proxy (Working fine)

Mit Proxy (Funktioniert nicht für Bilder) With Proxy (Not working for images)

Die Anforderungsheader für das Bild lauten wie folgt (Antwortheader werden oben eingefügt.)

Ohne Proxy

GET/rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0 HTTP/1.1
Authorization: Digest username="user", realm="rets.server.net", nonce="518ae676272228c981854d964fa3c27e", uri="/rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0", cnonce="MDA0NTM2", nc=00000003, qop="auth", response="4d49b094301092839649703384bde9e8", opaque="5ccdef346870ab04ddfe0412367fccba"
Host: rets.server.net:6103
Accept: */*
Cookie: JSESSIONID=46D39B9B7AF641005F474F21D4EC46DB; RETS-Session-ID=0
RETS-Version: RETS/1.5
User-Agent: PHRETS/1.0
Accept: */*

Mit Proxy

GET/rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0 HTTP/1.1
Host: rets.server.net:6103
Authorization: Digest username="user", realm="rets.server.net", nonce="90b869eca69494b36bb2fe9123f2a32c", uri="/rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0", cnonce="MDA1Nzgw", nc=00000003, qop="auth", response="f4655108472a89d1b482d866667c34d9", opaque="5ccdef346870ab04ddfe0412367fccba"
Accept: */*, */*
Cookie: JSESSIONID=A4D1BDA0327440F64C4E67A6BDBFF521; RETS-Session-ID=0
RETS-Version: RETS/1.5
User-Agent: PHRETS/1.0
X-Forwarded-For: 127.0.0.1
X-Forwarded-Host: 127.0.0.1
X-Forwarded-Server: localhost
Connection: Keep-Alive

Wir können definitiv zusätzliche Pakete sehen, die mit dem Status FIN und SYN hin und her gehen. Irgendeine Idee, warum ist das so?

antworten

Leider scheint diese Anwendung ziemlich schnell und locker mit HTTP-Standards zu spielen - es ist schwer zu sagen, was genau das ärgert, aber einige der Dinge, die Apache macht (wie die Kombination der beiden Unsinn-identischen Accept) Header in einem einzigen) sind schwer zu tun.

Ein paar Dinge, um zu versuchen, die Anfragen ähnlicher zu machen, in der Hoffnung, dass eine dieser Änderungen die Anfrage auf den Punkt bringt, dass sie diesen kniffligen HTTP-Server nicht mehr stört.

SetEnv proxy-nokeepalive 1

Der andere Hauptunterschied ist der X-Forwarded- Header - sie können nicht durch die Konfiguration deaktiviert werden, aber es gibt einen Patch da draußen, um sie auszuschalten.

Wenn eine dieser Änderungen nicht funktioniert, scheint die einzige andere Option darin zu bestehen, mehr Einblick in diese RETS-Anwendung zu bekommen - ich denke nicht, dass es eine Möglichkeit gibt, eine gute Debug-Protokollierung durchzuführen. Der Client scheint sich auch etwas anders zu verhalten, wenn er mit dem Proxy spricht, indem er neue Verbindungen für neue Anforderungen verwendet, anstatt seine offene Verbindung erneut zu verwenden. Ich nehme nicht an, dass es den Klienten anmeldet?