RFZ: HTTP Header komplett ersetzen

Moin,
ich möchte es mit PHP bzw. .htaccess (Apache) schaffen, den HTTP Header zu ersetzen. Der Server voll nicht mehr mit "HTTP/1.x xxx" antworten, sondern "XYZ/2.2 123".
Ich möchte also den Antwortheader komplett selbst definieren können, ist das irgendwie möglich?

Ich hab bereits mit .htaccess und "Header unset" probiert, bekomme aber immer nur einen Internal Server error... Wie kann ich denn feststellen ob das Modul "Headers" überhaupt geladen ist?

greetz RFZ

  1. Moin Moin,

    ich möchte es mit PHP bzw. .htaccess (Apache) schaffen, den HTTP Header zu ersetzen. Der Server voll nicht mehr mit "HTTP/1.x xxx" antworten, sondern "XYZ/2.2 123".
    Ich möchte also den Antwortheader komplett selbst definieren können, ist das irgendwie möglich?

    Das ist mit PHP, so weit mir bekannt ist, nicht möglich. Es gibt aber ein interessantes Modul mod_asis http://httpd.apache.org/docs-2.0/mod/mod_asis.html; bin mir aber zimlich sicher, es werden dennoch HTTP-Header hinzugefügt.

    Ich hab bereits mit .htaccess und "Header unset" probiert, bekomme aber immer nur einen Internal Server error... Wie kann ich denn feststellen ob das Modul "Headers" überhaupt geladen ist?

    Letztentlich mit ausreichender Sicherheit nur durch eine Anfrage bei Support Deines Hosters.

    Gruß aus Berlin!
    eddi

    --
    Manchmal trifft es einen doch ganz unverhofft t86591:
    > '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
    Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)
    1. Das ist mit PHP, so weit mir bekannt ist, nicht möglich. Es gibt aber ein interessantes Modul mod_asis http://httpd.apache.org/docs-2.0/mod/mod_asis.html; bin mir aber zimlich sicher, es werden dennoch HTTP-Header hinzugefügt.

      Darauf bin ich auch eben beim Durchstöbern der Doku sestoßen, auch dabei werden Header hinzugefügt...

      Letztentlich mit ausreichender Sicherheit nur durch eine Anfrage bei Support Deines Hosters.

      Ist mein eigener Server, aber ich kann nur .htaccess nutzen, da es bei anderen Hostern auch laufen soll.
      Mittlerweile weiss ich dass der Mod läuft, hilft aber auch nix...

      greetz RFZ

      1. Hi RFZ,

        Ist mein eigener Server, aber ich kann nur .htaccess nutzen, da es bei anderen Hostern auch laufen soll.

        Du weißt, dass es den Real Server inzwischen als Open Source gibt (Helix). Da könntest Du Dir das Protokoll mal genau ansehen.

        Viele Grüße
        Mathias Bigge

  2. Moin!

    ich möchte es mit PHP bzw. .htaccess (Apache) schaffen, den HTTP Header zu ersetzen. Der Server voll nicht mehr mit "HTTP/1.x xxx" antworten, sondern "XYZ/2.2 123".

    Es widerspricht den regulären Erwartungen an einen HTTP-Server, dass dieser eine Anfrage des Protokolls "HTTP" mit einer Antwort eines ganz anderen Protokolls beantwortet.

    Insofern müsstest du deine Aufgabenstellung schon etwas präzisieren. Warum kannst du nicht HTTP ausliefern? Was willst du stattdessen ausliefern? Wer will das abfragen?

    Ich möchte also den Antwortheader komplett selbst definieren können, ist das irgendwie möglich?

    Apache macht den Unterschied zwischen "parsed header" und "non parsed header". Diese Info steht aber nur sehr versteckt irgendwo - ich habe sie zufällig irgendwann mal für Perlskripte herausgefunden. Wenn du mit einem Perl-Skript komplett alle HTTP-Header UND auch ohne Buffer direkt Ausgaben zum Browser schicken willst, dann muß das Perl-Skript mit dem Namen "nph-" beginnen.

    Also im Zweifel würde dein Vorhaben mit so einem Perl-Skript schon funktionieren - aber wir sollten vorher schon noch mal klären, was du da eigentlich genau machen willst.

    - Sven Rautenberg

    1. Also im Zweifel würde dein Vorhaben mit so einem Perl-Skript schon funktionieren - aber wir sollten vorher schon noch mal klären, was du da eigentlich genau machen willst.

      Ok, ich suche einfach theoretisch nach einer Möglichkeit einen Stream (z.B. via RTSP) über einen normalen Webserver zu verbreiten. Dazu ist es in vielen Fällen nötig einen anderen Header zu senden, emeb "RTSP/x" oder "ICY 200 OK" bei NSV-Streams.
      In der Praxis hab ich grad eine Lösung gefunden, da ich zumindest NSV-Streams auch als Dateien 'tarnen' kann. Winamp erkennt sie dann zwar nicht direkt als Streams, aber läd den Stream ohne Probleme.
      Bei RealMedia oder WindowsMedia Streams hab ich da noch keine richtigen erfolge erzielt, und ausserdem interessiert es mich generell ob die Möglichkeit besteht den Header so zu verändern ;)

      greetz RFZ

      1. Moin!

        Ok, ich suche einfach theoretisch nach einer Möglichkeit einen Stream (z.B. via RTSP) über einen normalen Webserver zu verbreiten. Dazu ist es in vielen Fällen nötig einen anderen Header zu senden, emeb "RTSP/x" oder "ICY 200 OK" bei NSV-Streams.

        RTSP ist mir noch bekannt aus meiner Studienzeit - bei NSV-Streams setze ich einfach mal voraus, dass sie im Grundsatz her ähnlich funktionieren.

        Ich bin der Auffassung, dass deine Bemühungen, mit PHP unter HTTP-Apache ein RTSP zu emulieren, nicht funktionieren können - und zwar aus der grundsätzlichen Überlegung des RTSP-Protokolls heraus.

        Wenn PHP mit dem Apachen läuft, hast zu zum einen das Problem der max_execution_time. Dein Skript läuft einfach nicht unendlich lange, wenngleich man diese Einschränkung, die lediglich zum Serverschutz gehört, natürlich auch umgehen bzw. abschalten kann.

        Aber du mußt deiner Applikation dann immer noch schmackhaft machen, dass sie eine HTTP-Anfrage an den Webserver stellt - denn alles andere als HTTP wird der Apache als illegalen Request zurückweisen.

        Im Prinzip brauchst du also einen Apachen, der kein HTTP, sondern RTSP spricht. So einen gibts aber noch nicht.

        Du hast eine Chance mit PHP: Du kannst auch Kommandozeilenskripte in PHP schreiben. Diese Skripte können ihrerseits auch ein Socket öffnen und als Server agieren. Man kann sie sogar als Daemon in den Hintergrund schicken, damit sie dann passend und dauerhaft laufen. Und man kann sie forken, um einzelne Requests dann jeweils individuell abzuarbeiten, während der Mutterprozess auf neue Requests wartet.

        Denn das zentrale Problem ist: RTSP schickt auf Befehl einen Stream nach draußen. Wenn man am Client aber nun "spult", also einen Teil überspringt oder zurückgeht, dann wird ein neuer RTSP-Request an DENSELBEN Serverprozess gesendet, welcher nun seinerseits in der Medienressource nach vorne oder hinten springen und dann ab dort weiterstreamen soll. Solch ein Verhalten ist aber absolut untypisch für das verbindungslose HTTP! HTTP sendet eine Ressouce komplett raus, und dann ist Schluß.

        Das, was du also mit PHP unter Apache realisieren kannst, ist sowieso nur ein HTTP-Streaming. RTSP wirst du nicht realisieren können, weil es elementar andere Funktionalitäten erfordert, auf die Apache nicht eingestellt ist.

        In der Praxis hab ich grad eine Lösung gefunden, da ich zumindest NSV-Streams auch als Dateien 'tarnen' kann. Winamp erkennt sie dann zwar nicht direkt als Streams, aber läd den Stream ohne Probleme.
        Bei RealMedia oder WindowsMedia Streams hab ich da noch keine richtigen erfolge erzielt, und ausserdem interessiert es mich generell ob die Möglichkeit besteht den Header so zu verändern ;)

        Wenn es dir nur darum geht, einfach mal einen Stream rauszuschicken: Es gibt von Real IIRC auch einen kostenlos einsetzbaren Streaming-Server für ganz wenige parallele Sendungen - bei Windows Media bin ich mir dabei sogar absolut sicher. Und auch Quicktime hat mit Darwin (wenn ich es richtig erinnere) einen Streamingserver im Angebot, welcher sogar irgendwie Open Source ist, zumindest aber keine teuren Lizenzen kosten. Und darüber hinaus gibts gerade auch für Winamp bzw. MP3-Streams diverse andere Lösungen (ICECAST etc.) für Linux verfügbar.

        Wenn es dir darum geht, RTSP zu implementieren, dann mußt du dich wohl oder übel mal mit den Kommandozeilenfähigkeiten und Servermöglichkeiten von PHP vertraut machen. Dass sowas grundsätzlich geht, hat Andreas Korthaus schon für SELFHTML bewiesen, indem er einen PHP-Serverdaemon für die Community-Applikationen (die alle noch programmiert werden sollen) programmiert hat. Da PHP nicht gerade für ultimative Performance bekannt ist, wird das alles auch noch mal in C realisiert, aber der Prototyp agiert als vollwertiger, über TCP/IP ansprechbarer Server.

        - Sven Rautenberg

        1. Hallo Sven,

          Und auch Quicktime hat mit Darwin (wenn ich es richtig erinnere) einen
          Streamingserver im Angebot, welcher sogar irgendwie Open Source ist,
          zumindest aber keine teuren Lizenzen kosten.

          http://developer.apple.com/darwin/projects/streaming/

          Tim

          --
          Religion..
        2. RTSP ist mir noch bekannt aus meiner Studienzeit - bei NSV-Streams setze ich einfach mal voraus, dass sie im Grundsatz her ähnlich funktionieren.

          Das ist nicht der Fall, NSV ist, wie MMS auch, sehr stark mit HTTP vergleichbar, sprich lediglich eine Anfrage und darauf dann der Stream als endlose übertragung.
          Daher ist es durchaus möglich NSV-Streams (und MMS) mit PHP zu generieren, was mir gestern auch gelungen ist.
          Das ganze dient dazu einen Stream mit einem PHP-Script aufzurufen, in eine Datei zu puffern, und mit einem weiteren Script dann aus dieser Datei an alle Clients zu übertragen.
          Damit ist es möglich mit einem Server der nur eine geringe Bandbreite hat (man denke da an die User zuhause) den Stream trotzdem sehr vielen Clients zu ermöglichen.
          Ich kann mit dem Script bereits ohne merkliche Serverlast 8 Clients (mehr wollten nicht test :)) mit einem 1MBit Stream versorgen.

          Ich bin der Auffassung, dass deine Bemühungen, mit PHP unter HTTP-Apache ein RTSP zu emulieren, nicht funktionieren können - und zwar aus der grundsätzlichen Überlegung des RTSP-Protokolls heraus.

          Bei RTSP wirst du vermutlich recht behalten, allein schon dadurch dass RTSP auf mehrere Requests antworten muss.

          Wenn PHP mit dem Apachen läuft, hast zu zum einen das Problem der max_execution_time. Dein Skript läuft einfach nicht unendlich lange, wenngleich man diese Einschränkung, die lediglich zum Serverschutz gehört, natürlich auch umgehen bzw. abschalten kann.

          Das ist keine große Sache, ich hab schon oft PHP-Basierte IRC-Chat-Clients geschrieben, diese müssen auch sehr lange laufen, damit gibt es keine Probleme.

          Mit dem Rest was RTSP betrifft hast du vollkommen recht, danke für die Antworten ;)

          - Sven Rautenberg

          greetz RFZ