Apache Header entfernen

CyberLine

New Member
Hab folgendes Problem:

ich muß für eine Spezielle Software sämtliche Header vom Apache aus der Response entfernen. Es darf also nur der Status gesendet werden und dann direkt der Inhalt.

Mit mod_header bekomme ich aber laut Doku die wichtigsten nicht weg: Server und Date.

So sieht der "abgespeckte" derzeit Header aus:
Code:
HTTP/1.1 200 OK
Date: Fri, 31 Mar 2006 08:54:39 GMT
Server: Apache
Content-Length: 157
Connection: close
Content-Type: text/html

Hat jemand ne idee wie ich das trotzdem umsetzen könnte ? ggf. mit nem anderen HttpD?

Thx im vorraus
 
RFC 2616:
Code:
   Origin servers MUST include a Date header field in all responses,
   except in these cases:

      1. If the response status code is 100 (Continue) or 101 (Switching
         Protocols), the response MAY include a Date header field, at
         the server's option.

      2. If the response status code conveys a server error, e.g. 500
         (Internal Server Error) or 503 (Service Unavailable), and it is
         inconvenient or impossible to generate a valid Date.

      3. If the server does not have a clock that can provide a
         reasonable approximation of the current time, its responses
         MUST NOT include a Date header field. In this case, the rules
         in section 14.18.1 MUST be followed.
Für die meisten anderen Header Zeilen die Apache nicht löschen will wird ähnliches gelten. Du kannst zwar einen anderen httpd nehmen oder den Apache Source Code anpassen um alle Header Zeilen zu löschen aber dann wär das Ergebniss kein HTTP mehr. IMHO wäre es besser die Client Software an den HTTP Standard anzupassen oder ein anderes Protokoll zu verwenden.
 
HornOx said:
IMHO wäre es besser die Client Software an den HTTP Standard anzupassen oder ein anderes Protokoll zu verwenden.

Ich werde wohl kaum Winamp anpassen :D

Ich erklär mal kurz was Winamp braucht:

Code:
HTTP/1.1 200 OK
Icy <STATUS>: MELDUNG
 
Last edited by a moderator:
Ich erklär mal kurz was Winamp braucht
Probiere es erstemal selbst zu verstehen:p
Anfrage:
Code:
GET /stream/1040 HTTP/1.0
Host: 64.236.34.67
User-Agent: WinampMPEG/5.21
Accept: */*
Icy-MetaData:1
Connection: close
Antwort:
Code:
ICY 200 OK
icy-notice1: <BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
[weitere headerzeilen]

[Inhalt]
Die icy Zeilen sind alle Header und nicht Inhalt. Winamp wird die Date, Server, [...] Header Zeilen mit denen es nichts anfangen kann einfach ignorieren.
AFAIK gibt es keine Möglichkeit in der Apache Konfiguration das "HTTP/1.1 200 OK" in der ersten Zeile gegen ein "ICY 200 OK" auszutauschen, das wär auch nicht der richtige Ort dafür. Warum installierst du nicht einfach einen richtigen Shoutcastserver oder mod_mp3?
 
Ich frage mehrere Shoutcastserver mit einem Script ab und verteile dementsprechend auf den jeweils leersten server davon den Listener.

Das problem ist, sind alle Voll muß ich dem User ja was auf sein Winamp schicken sonst steht da nur "Error Syncing to Mpeg" und die Header vom Apache werden leider nicht ignoriert.
 
Das problem ist, sind alle Voll muß ich dem User ja was auf sein Winamp schicken
Wenn "was" nur eine Textzeile seien soll geht das per HTTP Status Meldung, dafür brauchst du kein Shoutcast. Bei php geht das z.b. mit "header('HTTP/1.1 400 Alle Server sind voll');", das zeigt mein Winamp auch brav an. Eine Statusmeldung in Shoutcast Form "ICY 400 Alle Server sind voll" kann Apache ohne mod_mp3 oder ähnliches nicht - wäre ja auch kein HTTP.
Ansonsten solltest du "was" genauer definieren.
die Header vom Apache werden leider nicht ignoriert.
Nur weil du das mehrfach behauptest wird das nicht wahrer. Nur Verweise auf Quellen oder eine Anleitung wie das Fehlverhalten für andere reproduzierbar wird helfen da weiter.
 
Last edited by a moderator:
HornOx said:
AFAIK gibt es keine Möglichkeit in der Apache Konfiguration das "HTTP/1.1 200 OK" in der ersten Zeile gegen ein "ICY 200 OK" auszutauschen,
Nur der Vollständigkeit halber:
Mit einem entsprechenden Output-Filter in Apache 2 ginge es.

huschi.
 
Mit einem entsprechenden Output-Filter in Apache 2 ginge es.
Um den richtigen Typ zu finden muß man sich durch die Apache Sourcen wühlen und sehenden Auges die "ist sehr langsam"-Warnung ignorieren oder genügend c++ können und zu viel Zeit haben um selbst was zu schreiben. Beides geht nicht allein mit der Apache Konfiguration und beides ist nicht wirklich praktikabel, dann lieber mod_mp3 auf das ich oben verlinkt habe :p
 
HornOx said:
muß man sich durch die Apache Sourcen wühlen und [...] oder genügend c++ können
Nein. Siehe http://httpd.apache.org/docs/2.0/filter.html
Outputfilter können auch in Perl oder PHP geschrieben werden.

Es war ja auch nur eine Feststellung um den Satz "AFAIK gibt es keine Möglichkeit in der Apache Konfiguration das "HTTP/1.1 200 OK" in der ersten Zeile gegen ein "ICY 200 OK" auszutauschen," nicht als absolute Wahrheit stehen zu lassen.

huschi.
 
http://httpd.apache.org/docs/2.0/mod/mod_ext_filter.html#extfilterdefine
The default value, AP_FTYPE_RESOURCE, is sufficient in most cases. If the filter needs to operate at a different point in the filter chain than resource filters, then this parameter will be necessary. See the AP_FTYPE_foo definitions in util_filter.h for appropriate values.
Um an das Protokoll zu kommen muß man ftype=30 setzten und an den Wert kommt man nur wenn man sich die Apache Sourcen anschaut.
Outputfilter können auch in Perl oder PHP geschrieben werden.
Weder Php noch Perl sind nicht Teil der Apache Konfiguration sondern eigenständige Programme. Ein cmd="sed '1s/HTTP/ICY/'" würde zwar ohne zusätzliche Skript Datei auskommen aber dennoch braucht Apache dafür ein zusätzliches Programm.
Es war ja auch nur eine Feststellung um den Satz "AFAIK gibt es keine Möglichkeit in der Apache Konfiguration das "HTTP/1.1 200 OK" in der ersten Zeile gegen ein "ICY 200 OK" auszutauschen," nicht als absolute Wahrheit stehen zu lassen.
Dafür sorgt schon das "AFAIK":D.
 
Freaks :D

Hab auf Grundlage der Diskussion ma bischen rumprobiert:

Code:
ExtFilterDefine icy_header cmd="/bin/php /root/test.php" EnableEnv=winamp ftype=30
Liefert mir KEINEN Header und Status, nur den Output von PHP auch wenn header setzte im Script.

Code:
ExtFilterDefine icy_header cmd="/bin/php /root/test.php" EnableEnv=winamp ftype=21

Liefert mir keinen Header aus PHP, dafür die Standardheader gefolgt vom PHP Output und anschliessend dem Normalen Output des Aufrufes, beispielsweise den Inhalt von index.html

Zufällig jemand den Passenden ftype am Start ? :D

das is der wohl passende Teil der util_filter.h:
Code:
00160 typedef enum {
00163     AP_FTYPE_RESOURCE     = 10,
00167     AP_FTYPE_CONTENT_SET  = 20,
00170     AP_FTYPE_PROTOCOL     = 30,
00172     AP_FTYPE_TRANSCODE    = 40,
00182     AP_FTYPE_CONNECTION  = 50,
00185     AP_FTYPE_NETWORK     = 60
00186 }

EDIT:
die Header fehlen bestimmt weil ich PHP im CMD Modus ausführe oder ? :D
 
Last edited by a moderator:
Ich bin nahe dran den Titel unter meinem Benutzernamen in "Besserwisser" zu ändern ;)
Zufällig jemand den Passenden ftype am Start ?
30 funktioniert bei mir. Wie kommst du auf ftype=21?!
die Header fehlen bestimmt weil ich PHP im CMD Modus ausführe oder ? :D
Damit php als Filter funktioniert mußt du von STDIN lesen und auf STDOUT schreiben, deswegen funktionieren einige HTTP spezifische php Funktionen nicht wie gewohnt. So sieht meine Apache Konfiguration aus:
Code:
ExtFilterDefine fixtext mode=output cmd="/var/www/devmode/html/test/q.php" ftype=30
<VirtualHost *>
[...]
SetOutputFilter fixtext
[...]
</VirtualHost>
Das PHP Test Script(mit chmod 755 o.ä.) sollte ungefähr so aussehen:
Code:
#!/usr/bin/php
HTTP/1.1 200 OK
Content-Type: text/plain

Stdin:
<?
while ($buffer=fgets(STDIN,1024)) {
  echo $buffer;
}
?>
Ende
Die Ausgabe wird um ein paar Sekunden verzögert weil das fgets erst ein Timeout bekommen muß damit die Schleife beendet wird, geht bestimmt auch eleganter...
 
HornOx said:
Wie kommst du auf ftype=21?

Moduldoku auf apache.org :D

Yo, habs ma fast so gemacht wie du geschrieben hast und funktioniert astrein, allerdings kann man das fgets etc. weglassen da bei Ftype 30 der Filter VOR der regülären Ausgabe ausgegeben wird, danach dann der Inhalt der Datei die ich anfordere. Hab jetzt also den Header hardgecodet im script und danach folgt Regulär output direkt vom Apache.
 
Back
Top