Header ohne trennendes Leerzeichen möglich?
RFZ
- php
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
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
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
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
你好 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.
再见,
克里斯蒂安
Hallo Christian,
Und wenn er das nicht macht, machts jemand anders ;)
Ich meinte eher das im Shoutcast-Server. ;-)
Viele Grüße,
Christian
你好 Christian,
Und wenn er das nicht macht, machts jemand anders ;)
Ich meinte eher das im Shoutcast-Server. ;-)
Hehe, da gilt das sicher auch *g*
再见,
克里斯蒂安