Ralf: Header von anderem Server mit PHP übernehmen?

Hallo!

Ich bin gestern auf etwas zumindest für mich merkwürdiges gestoßen. Und zwar liefert ein Apache-Server Seiten so aus, als ob sie von einem IIS stammen.
Inhaltlich stammen die auch von einem IIS, aber ausgeliefert werden sie eindeutig (meine ich) von einem Apache. Nachfolgend die Header einer Seite, die auf dem Apache liegt (abgefragt über http://www.seoconsultants.com/tools/headers.asp):

#1 Server Response: http://test.domainname.de/abc/xyz/test.html
HTTP Status Code: HTTP/1.1 200 OK
Date: Sun, 12 Jul 2009 09:05:05 GMT
Server: Apache/2.2.9 (Debian) mod_ssl/2.2.9 OpenSSL/0.9.8g PHP/5.2.8
Last-Modified: Mon, 29 Oct 2007 15:02:18 GMT
ETag: "24289d-1ea-43da2fc8df280"
Accept-Ranges: bytes
Content-Length: 490
Content-Type: text/html
Via: 1.0 www.domainname.de
Connection: close

Nun die Header einer Seite, die nicht auf dem Apache liegt, sondern auf einem IIS, aber vom Apache ausgeliefert wird:

#1 Server Response: http://test.domainname.de/ddd/eee/titel.aspx
HTTP Status Code: HTTP/1.1 200 OK
Date: Sun, 12 Jul 2009 09:09:53 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=Windows-1252
Content-Length: 3220
Set-Cookie: ASP.NET_SessionId=uun0dw55kt4nmt55xaugu455; path=/; HttpOnly
Via: 1.0 www.domainname.de
Connection: close

Die gleiche Seite original vom IIS bringt folgende Header:

#1 Server Response: http://www.originaldomain.de/ddd/eee/titel.aspx
HTTP Status Code: HTTP/1.1 200 OK
Connection: close
Date: Sun, 12 Jul 2009 09:11:55 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=ooptlnrd2n31vsbuurzrxu45; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=Windows-1252
Content-Length: 3220

Nun meine Frage: Wie ist das möglich? Mit PHP? Oder stelle ich die Frage im falschen Bereich und das geht ganz anders?

Hintergrund ist, dass ich etwas ähnliches gern selbst machen möchte. Also fremde Seiten auslesen und unverändert ausgeben.

  1. Hi,

    Ich bin gestern auf etwas zumindest für mich merkwürdiges gestoßen. Und zwar liefert ein Apache-Server Seiten so aus, als ob sie von einem IIS stammen.

    wird der Apache vielleicht als Proxy eingesetzt?

    #1 Server Response: http://test.domainname.de/ddd/eee/titel.aspx
    [...]
    #1 Server Response: http://www.originaldomain.de/ddd/eee/titel.aspx

    Tut mir leid - ich sehe zwischen den beiden Responses keinen Unterschied, außer dass der vermeintliche Apache noch ein "Via: " ergänzt. Auch das deutet für mich darauf hin, dass er hier als Proxy arbeitet.

    Nun meine Frage: Wie ist das möglich? Mit PHP?

    Theoretisch wohl auch - aber umständlich.

    Oder stelle ich die Frage im falschen Bereich und das geht ganz anders?

    Ich schätze, dass das Apache-Modul mod_proxy zum Einsatz kommt.

    Hintergrund ist, dass ich etwas ähnliches gern selbst machen möchte. Also fremde Seiten auslesen und unverändert ausgeben.

    Wozu das?

    So long,
     Martin

    --
    Wer es in einem Unternehmen zu etwas bringen will, muss so tun, als hätte er es schon zu etwas gebracht.
    1. Hallo,

      wird der Apache vielleicht als Proxy eingesetzt?

      Via: 1.0 www.domainname.de

      ... dass der vermeintliche Apache noch ein "Via: " ergänzt. Auch das deutet für mich darauf hin, dass er hier als Proxy arbeitet.

      es wird ein Proxy genutzt. Dies ergibt sich aus RFC 2616 die hier von "MUST" spricht im Sinne der RFC 2119. Dass Apache zum Einsatz kommt, ist aus den HTTP-Headern nicht ablesbar; somit mutmaßlich.

      Gruß aus Berlin!
      eddi

      --
      Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
      Wer weiß - vielleicht der Mittelweg. ;)
      1. Hi,

        ... dass der vermeintliche Apache noch ein "Via: " ergänzt. Auch das deutet für mich darauf hin, dass er hier als Proxy arbeitet.
        es wird ein Proxy genutzt. Dies ergibt sich aus RFC 2616 die hier von "MUST" spricht im Sinne der RFC 2119.

        okay, bis eben hatte ich das mit dem Proxy nur vermutet, jetzt weiß ich es.

        Dass Apache zum Einsatz kommt, ist aus den HTTP-Headern nicht ablesbar; somit mutmaßlich.

        Nein, das hatte ich aus den Angaben des OP entnommen, der das quasi als Tatsache hinstellt. Okay, durch den Einschub "(meine ich)" relativiert er das ein wenig.

        Ciao,
         Martin

        --
        Ordnung ist, wenn man etwas findet, was man gar nicht sucht.
        1. Hallo,
          Hi,

          Hallo Martin,

          Nein, das hatte ich aus den Angaben des OP entnommen, der das quasi als Tatsache hinstellt.

          wenn ich Dich anschreibe, kannst Du das erkennen.

          Gruß aus Berlin!
          eddi

          --
          Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
          Wer weiß - vielleicht der Mittelweg. ;)
        2. Hallo,

          vielen Dank für die Antworten. Den Apache hatte ich angenommen, weil der Server-Header dies für eine Seite ausweist, die zumindest originär von der Domain stammt. Aber auch für diese wird ja wohl ein Proxy eingesetzt, wenn ich "Via:" richtig verstehe.

          An welcher Stelle mache ich nun weiter? Ich möchte zum einen eigene Seiten ausliefern, zum zweiten fremde Seiten inhaltlich modifziert ausgeben und zum dritten fremde Seiten unverändert ausliefern. Letzteres soll nur in einer Übergangsphase vorkommen.

          Meine PHP-Kenntnisse sind zwar beschränkt, aber ausbaufähig. Mit dem Apache habe ich mich bisher nur bzgl. mod_rewrite befasst.

          Lt. phpinfo() ist mod_proxy auf meinem Webspace verfügbar (all-inkl.com Privat Plus). Reicht das für meine Zwecke und welcher Lesestoff ist zu empfehlen?

          Ralf

          1. Re:

            • Ich möchte zum einen eigene Seiten ausliefern,
            • zum zweiten fremde Seiten inhaltlich modifziert ausgeben
            • und zum dritten fremde Seiten unverändert ausliefern. Letzteres soll nur in einer Übergangsphase vorkommen.

            Dein Web wird ja bereits ausgeliefert. Das ist hier also nicht Thema. Beschreibe aber bitte, was Du als "modifiziert" bezeichnest! Generell habe ich Bedenken, was Die Rechtslage betrifft, fremde Inhalte auf der eigenen Seite (eingebettet) anzuzeigen. Hierbei solltest Du Vorkehrungen treffen, dass Dir keiner was kann. Somit ist auch die Frage wichtig, _wie_ Du gedenkst, "fremde Seiten ... aus[zu]liefern". Dementsprechend wirst Du auch mit Lesestoff versorgt werden.

            Gruß aus Berlin!
            eddi

            --
            Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
            Wer weiß - vielleicht der Mittelweg. ;)
            1. Hallo,

              Dein Web wird ja bereits ausgeliefert. Das ist hier also nicht Thema. Beschreibe aber bitte, was Du als "modifiziert" bezeichnest! Generell habe ich Bedenken, was Die Rechtslage betrifft, fremde Inhalte auf der eigenen Seite (eingebettet) anzuzeigen. Hierbei solltest Du Vorkehrungen treffen, dass Dir keiner was kann. Somit ist auch die Frage wichtig, _wie_ Du gedenkst, "fremde Seiten ... aus[zu]liefern". Dementsprechend wirst Du auch mit Lesestoff versorgt werden.

              Ich hätte mich etwas genauer ausdrücken sollen. Mit "fremd" sind Seiten gemeint, die auf einer anderen Domain angezeigt werden, deren Inhalt ich aber bestimmen kann (leider nicht den Quelltext). Rechtlich gibt es daher keine Probleme.
              Es geht mir aber darum, die Seiten (speziell die dahinter liegende Funktionalität) unter einer eigenen Domain zu haben. Zwar kann ich per DNS-Eintrag eine eigene Domain auf die "fremden" Seiten setzen (das wird vom Anbieter unterstützt), aber ich möchte nur einen Teil der Seiten durchreichen und das Gerüst selbst erstellen.

              Nach dem Hinweis auf mod_proxy habe ich auch bereits herausgefunden, dass ich mit dem P flag bei mod_rewrite die Seite von einem anderen Server laden kann. Damit sollte zumindest der Fall der unveränderten Seiten geklärt sein. Und darum ging es mir zunächst. Da die Seiten intern nur relative Adressen verwenden, sollten sie auch unverändert verwendet werden können.

              Wenn es darum geht, die Seiten zu verändern, werde ich wohl cURL- und DOM-Funktionen einsetzen müssen.

              Ralf

              1. Re:

                Ich hätte mich etwas genauer ausdrücken sollen. Mit "fremd" sind Seiten gemeint, die auf einer anderen Domain angezeigt werden, deren Inhalt ich aber bestimmen kann (leider nicht den Quelltext). Rechtlich gibt es daher keine Probleme.

                hervorragend ;)

                Es geht mir aber darum, die Seiten (speziell die dahinter liegende Funktionalität) ... aber ich möchte nur einen Teil der Seiten durchreichen und das Gerüst selbst erstellen.

                alles klar

                Nach dem Hinweis auf mod_proxy habe ich auch bereits herausgefunden, dass ich mit dem P flag bei mod_rewrite die Seite von einem anderen Server laden kann. Damit sollte zumindest der Fall der unveränderten Seiten geklärt sein. Und darum ging es mir zunächst. Da die Seiten intern nur relative Adressen verwenden, sollten sie auch unverändert verwendet werden können.

                Wenn Du Dir mod_proxy durcharbeitest, wirst Du feststellen, dass Du zur Nutzung dieses Moduls zu Griff auf den Konfigurationskontext "server config" oder "virtual host" (also die zentrale Konfigurationsdatei) benötigst. Auch wenn ich hier immer wieder gutes über Deinen Provider lese, glaube ich kaum, dass er dies seinen Kunden erlauben wird. Somit sehe ich diese Möglichkeit bereits im Prinzip ausscheiden. Weiterhin willst Du ja den Inhalt anpassen, was in dem ersichtlichen Ausmaße nicht möglich ist.

                Somit bleibt das ganze doch an PHP hängen. Wie Du das dann im Detail machst, ist Dir überlassen. Möglich sind direkte Verbindungen via fsockopen(), stream_socket_client() die Dir alle Freiheiten in - aber auch die Kenntnis und dessen Verarbeitung der HTTP-Schicht lassen. Du kannst gucken, ob Dein Provider ein(ig)e HTTP-Erweitrungen zur Verfügung stellt oder ob Du lieber mit der vorwiegend zur Verfügung gestellten curl arbeiten willst. Der Vollständigkeit geschuldet: Es ist auch Pears HTTP möglich.

                Das Prinzip dahinter ist aber in jedem Fall gleich: Die vom Nutzer an Domain A abgeforderte Ressource (also das Proxy-Script) nimmt als Client Verbindung zur Domain B auf, holt die Ressource, verarbeitet sie und gibt diese an den Nutzer aus.

                Fragen? Frag!

                Gruß aus Berlin!
                eddi

                --
                Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
                Wer weiß - vielleicht der Mittelweg. ;)
                1. Wenn Du Dir mod_proxy durcharbeitest, wirst Du feststellen, dass Du zur Nutzung dieses Moduls zu Griff auf den Konfigurationskontext "server config" oder "virtual host" (also die zentrale Konfigurationsdatei) benötigst. Auch wenn ich hier immer wieder gutes über Deinen Provider lese, glaube ich kaum, dass er dies seinen Kunden erlauben wird. Somit sehe ich diese Möglichkeit bereits im Prinzip ausscheiden. Weiterhin willst Du ja den Inhalt anpassen, was in dem ersichtlichen Ausmaße nicht möglich ist.

                  Ich hatte gedacht, dass für die Nutzung des [P] Flags das mod_proxy Modul nur geladen sein muss (was es lt. phpinfo() ist). Aber leider gibt der Server einen "Internal Server Error" zurück (die Definition war richtig, denn bei [R] statt [P] wird die Seite geladen - natürlich von der fremden Domain).

                  Somit bleibt das ganze doch an PHP hängen. Wie Du das dann im Detail machst, ist Dir überlassen. ... oder ob Du lieber mit der vorwiegend zur Verfügung gestellten curl arbeiten willst.

                  Das werde ich dann wohl machen müssen (mit dem Protokoll möchte ich mich nicht auch noch befassen).

                  Vielen Dank nochmal!

                  Ralf

                  1. Nachtrag:
                    all-inkl.com hat auf meine Nachfrage hin die Nutzung des [P] Flags ermöglicht.

                    1. Re:

                      Nachtrag:
                      all-inkl.com hat auf meine Nachfrage hin die Nutzung des [P] Flags ermöglicht.

                      So ohne weiteres sehe ich aber nicht, wie Dir dies helfen könnte. Du kannst zwar nun eine Anfrage zum Proxy-Modul druchreichen, was dieses dann Servieren wird, jedoch sehe ich keinen Ansatzpunkt für PHP, den Inhalt zu modifizieren.

                      Gruß aus Berlin!
                      eddi

                      --
                      Frei nach z1626: Was wir brauchen ist eine neue Aufklärung - eine "Aufklärung 2.0" wenn man so will.
                      Wie sieht es bsw. mit Strafverfolgung der Bundesregierung nach § 154 StGB für jedes von Karlsruhe kassierte Gesetz aus? Wurde sie etwa nicht auf das Grundgesetz eingeschworen?
                      1. Hallo,

                        So ohne weiteres sehe ich aber nicht, wie Dir dies helfen könnte. Du kannst zwar nun eine Anfrage zum Proxy-Modul druchreichen, was dieses dann Servieren wird, jedoch sehe ich keinen Ansatzpunkt für PHP, den Inhalt zu modifizieren.

                        Für Seiten, deren Inhalt modifiziert werden muss, bringt das natürlich nichts. Ich kann für den Anfang aber damit leben, die Seiten nur durchzureichen. So bringe ich das Projekt schon mal zum Laufen und kann mich nach und nach um die Weiterentwicklung kümmern.

                        Ralf