RFZ: Header ohne trennendes Leerzeichen möglich?

Hallo,
gibt es eine Möglichkeit mit PHP oder Apache (mod_header) einen Header zu setzen, dessen Wert nicht mit einem Leerzeichen vom Typ getrennt ist?
Um genau zu sein, brauche ich den Header "content-type:video/nsv", ein "content-type: video/nsv" oder "Content-Type: video/nsv" funktioniert nicht, das ist eine nervige Eigenart des Shoutcast-Servers, wofür ich das benötige.
Jemand eine Idee?
Wenn ich den Header selbst so setze, korrigiert ihn der Apache :/

greetz RFZ

  1. Hallo RFZ,

    Jemand eine Idee?

    Mit einem PHP/CGI-Script geht das nicht. Was Du allerdings machen kannst, ist ein NPH-CGI-Script zu erstellen, das kann direkt an den Browser "zurückschreiben". Such mal in der Apache-Doku nach »nph«. Du musst allerdings die Möglichkeit haben, NPH-CGI-Scripte zu nutzen resp. Zugriff auf die Serverkonfiguration haben. Außerdem müssen NPH-CGI-Scripte *alle* Header selbst senden, inklusive des HTTP/1.0 (oder 1.1) 200 OK und anderen Pflicht-Headern nach dem HTTP-Standard und vor allem auch korrekt auf Anfragen reagieren nach dem HTTP-Standard - Du wirst Dich da also einlesen müssen.

    Das NPH-Script kann auch (sofern ein Interpreter bereitsteht) ein CLI-PHP-Script ein (wichtig: CLI-SAPI, nicht CGI-SAPI, da die CGI-SAPI bestimmte Dinge annimmt (eine vollständige CGI-Schnittstelle), die nicht vorhanden sind). Dieses CLI-PHP-Script muss allerdings die Header manuell am Anfang per echo raushauen und nicht Header() verwenden.

    Folgendes minimale (und deswegen vermutlich noch nicht ganz standardkonforme) Testscript erzielt das gewünschte Ergebnis:
    ------------------------------------------------------------
    christian@midnight /var/www/localhost/cgi-bin $ cat nph-bla
    #!/bin/sh

    echo -ne "HTTP/1.1 200 OK\r\n"
    echo -ne "content-type:video/nsv\r\n\r\n"
    christian@midnight /var/www/localhost/cgi-bin $ curl -v http://localhost/cgi-bin/nph-bla
    * About to connect() to localhost port 80
    *   Trying 127.0.0.1... * connected
    * Connected to localhost (127.0.0.1) port 80

    GET /cgi-bin/nph-bla HTTP/1.1

    User-Agent: curl/7.13.2 (i686-pc-linux-gnu) libcurl/7.13.2 OpenSSL/0.9.7e zlib/1.2.3 libidn/0.5.13
    Host: localhost
    Pragma: no-cache
    Accept: */*

    < HTTP/1.1 200 OK
    < content-type:video/nsv
    ------------------------------------------------------------

    Aber »content-type:video/nsv«, »content-type: video/nsv« und »Content-Type: video/nsv« sind HTTP-semantisch gesehen identisch - warum solltest Du also ein »content-type:video/nsv« senden wollen, auch wenn das der Shoutcast-Server so macht?

    Viele Grüße,
    Christian

    1. Aber »content-type:video/nsv«, »content-type: video/nsv« und »Content-Type: video/nsv« sind HTTP-semantisch gesehen identisch - warum solltest Du also ein »content-type:video/nsv« senden wollen, auch wenn das der Shoutcast-Server so macht?

      Weil ein Shoutcast-Server einen audio/mpeg Stream annimmt, wenn der Header nicht explizit "content-type:video/nsv" lautet, ist hald leider so.
      Und danke dass du dir so viel Arbeit gemacht hast, aber nach dem Motto "Wenn man den Wald vor lauter Bäumen nicht sieht", hab ichs eben selbst ganz simpel gelöst:
      header("foo: bar\r\ncontent-type:video/nsv");
      So korrigiert nämlich der apache/php den zweiten Header nicht.

      Naja, vielen Dank, Problem gelöst ;)

      greetz RFZ

      1. Hallo RFZ,

        Weil ein Shoutcast-Server einen audio/mpeg Stream annimmt, wenn der Header nicht explizit "content-type:video/nsv" lautet, ist hald leider so.

        Würde ich aber als Bug melden.

        header("foo: bar\r\ncontent-type:video/nsv");
        So korrigiert nämlich der apache/php den zweiten Header nicht.

        Nett zu wissen, danke.

        Viele Grüße,
        Christian

        1. 你好 Christian,

          Weil ein Shoutcast-Server einen audio/mpeg Stream annimmt, wenn der
          Header nicht explizit "content-type:video/nsv" lautet, ist hald leider
          so.

          Würde ich aber als Bug melden.

          Und wenn er das nicht macht, machts jemand anders ;) Das ist so nicht
          gewollt; das liegt daran, dass mod_php die Header-Einträge in die
          Apache-Interne Response-Headers-Table mappt und dabei vergisst, daraus zwei
          Einträge zu machen. So wird ein Eintrag für den Header foo gemacht, der
          bar\r\ncontent-type:video/nsv enthält; wenn mod_php das nicht irgendwann
          fixed kann es genau so gut passieren, dass Apache einen Maskierungs-Modus
          für solche (gewollten) Fälle einführt.

          Verlassen würde ich mich darauf auf keinen Fall. Undokumentiertes Verhalten,
          das von den meisten anderen als Bug angesehen werden wird. Kann sich
          jederzeit ändern.

          再见,
           克里斯蒂安

          --
          Plasma-Bildschirm geklaut | Zahnarztbesuch
          Wenn du gehst, gehe. Wenn du sitzt, sitze. Und vor allem: schwanke nicht!
          http://wwwtech.de/
          1. Hallo Christian,

            Und wenn er das nicht macht, machts jemand anders ;)

            Ich meinte eher das im Shoutcast-Server. ;-)

            Viele Grüße,
            Christian

            1. 你好 Christian,

              Und wenn er das nicht macht, machts jemand anders ;)

              Ich meinte eher das im Shoutcast-Server. ;-)

              Hehe, da gilt das sicher auch *g*

              再见,
               克里斯蒂安

              --
              Plasma-Bildschirm geklaut | Zahnarztbesuch
              Fatal! Ich kann kein Reserve-Offizier mehr sein!
              http://wwwtech.de/