Content Negotiation auf Abwegen?
Robert Bienert
- webserver
Moin!
Ich hoffe, ihr hattet ein schönes Weihnachtsfest :-) Pünktlich zu Heiligabend kam dann auch der Herbst nach Nordhessen ;-)
Kommen wir nun zum eigentlichen Problem (auch wenn die Klimaerwärmung weit gravierender ist):
Ich habe auf einem Server mit folgender Apache-Option Content Negotiation eingeschaltet:
Option +MultiViews
Hintergrund ist, dass ich gerne RSS-Feeds auch komprimiert an Feedreader ausliefern möchte. Haben wir nun einen Feed rss.xml mit der komprimierten Version rss.xml.gz, so sollte nach meinem Verständnis der Server bei der Anforderung von rss.xml nach Bedarf den komprimierten Feed ausliefern – also in Abhängigkeit vom Accept-Encoding HTTP-Header des Useragents.
Tatsächlich ist es allerdings so, dass beim Zugriff auf die rss.xml _nie_ der gzipte Feed ausgeliefert wird, sondern immer die „rohe XML-Datei“ (ohne Kompression):
$ curl --compressed -I http://freihoch2.nerdbox.de/personal/rss.xml
HTTP/1.1 200 OK
Date: Wed, 27 Dec 2006 11:59:37 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-18 mod_ssl/2.0.54 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4
Last-Modified: Fri, 22 Dec 2006 21:26:36 GMT
ETag: "8006f08-672-1a457b00"
Accept-Ranges: bytes
Content-Length: 1650
Content-Type: application/xml
Content-Negotiation funktioniert hingegen für die URI ohne irgendeine Dateiendung (nur rss) wunderbar:
$ curl --compressed -I http://freihoch2.nerdbox.de/personal/rss
HTTP/1.1 200 OK
Date: Wed, 27 Dec 2006 13:52:22 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-18 mod_ssl/2.0.54 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4
Content-Location: rss.xml.gz
Vary: negotiate,accept-encoding
TCN: choice
Last-Modified: Fri, 22 Dec 2006 21:26:36 GMT
ETag: "8007005-2d5-1a457b00;1a457b00"
Accept-Ranges: bytes
Content-Length: 725
Content-Type: application/xml
Content-Encoding: gzip
Die Seite läuft, wie man oben sehen kann, auf einem 2.0er Apache und es ist nicht ausgeschlossen, dass irgendwo in der Konfiguration eine Kleinigkeit fehlt, damit (auch) die URI …rss.xml „negotiated“ wird, allerdings weiß ich nicht, an welcher Stelle. Wer kann mir weiterhelfen?
Viele Grüße,
Robert
Hallo Robert.
Ich habe auf einem Server mit folgender Apache-Option Content Negotiation eingeschaltet:
Option +MultiViews
>
> […]
>
> Tatsächlich ist es allerdings so, dass beim Zugriff auf die rss.xml \_nie\_ der gzipte Feed ausgeliefert wird, […]
>
> Content-Negotiation funktioniert hingegen für die URI ohne irgendeine Dateiendung (nur [rss](http://freihoch2.nerdbox.de/personal/rss)) wunderbar:
Works as designed™. Genau so ist MultiViews doch aufgebaut?
> If the server receives a request for /some/dir/foo and /some/dir/foo does not exist, then the server reads the directory looking for all files named foo.\* […]
> Die Seite läuft, wie man oben sehen kann, auf einem 2.0er Apache und es ist nicht ausgeschlossen, dass irgendwo in der Konfiguration eine Kleinigkeit fehlt, damit (auch) die URI …rss.xml „negotiated“ wird, allerdings weiß ich nicht, an welcher Stelle. Wer kann mir weiterhelfen?
Die Apache-Doku meint, dass du die [MultiviewsMatch](http://httpd.apache.org/docs/2.0/mod/mod_mime.html#multiviewsmatch)-Direktive nutzen kannst, um zu erreichen, was du vorhast.
Einen schönen Mittwoch noch.
Gruß, Mathias
--
ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
debian/rules
Hallo Mathias!
Tatsächlich ist es allerdings so, dass beim Zugriff auf die rss.xml _nie_ der gzipte Feed ausgeliefert wird, […]
Content-Negotiation funktioniert hingegen für die URI ohne irgendeine Dateiendung (nur rss) wunderbar:
Works as designed™. Genau so ist MultiViews doch aufgebaut?
D.h. dass rss.xml.gz nie ausgeliefert wird, weil der existierenden rss.xml der Vorzug gegeben wird?
Die Apache-Doku meint, dass du die MultiviewsMatch-Direktive nutzen kannst, um zu erreichen, was du vorhast.
Leider weist mich die Doku aber nicht daraufhin, wie das funktionieren könnte. MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers [Handlers|Filters]
führt auch nicht zum Erfolg :-/
Viele Grüße,
Robert
Hallo Robert.
Die Apache-Doku meint, dass du die MultiviewsMatch-Direktive nutzen kannst, um zu erreichen, was du vorhast.
Leider weist mich die Doku aber nicht daraufhin, wie das funktionieren könnte.
MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers [Handlers|Filters]
führt auch nicht zum Erfolg :-/
Die Syntax im Handbuch ist dir doch aber geläufig, oder?
So weit ich das sehe, brauchst du folgendes:
MultiviewsMatch Handlers Filters
Einen schönen Mittwoch noch.
Gruß, Mathias
Moin Mathias!
Die Syntax im Handbuch ist dir doch aber geläufig, oder?
Sagen wir es einmal so: Es gibt Direktiven, die besser dokumentiert sind.
So weit ich das sehe, brauchst du folgendes:
MultiviewsMatch Handlers Filters
Ich hab das jetzt so in meiner .htaccess stehen:
Options +MultiViews
MultiviewsMatch Handlers Filters
Allerdings enthält mir der Apache beim Zugriff auf http://freihoch2.nerdbox.de/personal/rss.xml weiterhin beharrlich die rss.xml.gz vor, während nur …rss funktioniert. (Wahrscheinlich wollen die damit ihr mod_deflate pushen ;-) ).
Trotzdem schon einmal vielen Dank für deine Mühe.
Viele Grüße,
Robert
Hallo Robert.
Ich hab das jetzt so in meiner .htaccess stehen:
Options +MultiViews
MultiviewsMatch Handlers Filters
>
> Allerdings enthält mir der Apache beim Zugriff auf <http://freihoch2.nerdbox.de/personal/rss.xml> weiterhin beharrlich die rss.xml.gz vor, während nur …rss funktioniert.
Hm … Schon einmal testweise „rss.gz“ an Stelle von „rss.xml.gz“ versucht?
Leider kann ich hier auf meinem Server das Problem nicht nachvollziehen, da grundsätzlich die Gzip-komprimierte Ressource ausgeliefert wird.
> (Wahrscheinlich wollen die damit ihr mod\_deflate pushen ;-) ).
Man munkelt, man munkelt …
Einen schönen Mittwoch noch.
Gruß, Mathias
--
ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
debian/rules
Moin Mathias!
Hm … Schon einmal testweise „rss.gz“ an Stelle von „rss.xml.gz“ versucht?
Auch gut:
$ curl -I --compressed http://freihoch2.nerdbox.de/personal/rss.gz
HTTP/1.1 404 Not Found
Date: Wed, 27 Dec 2006 20:05:30 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-18 mod_ssl/2.0.54 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4
X-Powered-By: PHP/4.3.10-18
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Type: text/html; charset=ISO-8859-15
Die Fehlerseite wird immerhin komprimiert ausgeliefert.
Leider kann ich hier auf meinem Server das Problem nicht nachvollziehen, da grundsätzlich die Gzip-komprimierte Ressource ausgeliefert wird.
Wenn ich die Feedlinks ohne großes Hacken ändern könnte, wäre das ganze auch kein Problem, aber ich habe keine Lust, für dieses nette Feature meinen Blog umzuprogrammieren. Naja, dann schreibe ich einfach nen Apache-Handler als CGI-Skript, der dem Client die richtige Datei reicht, ist ja nicht schwierig.
Einen schönen Mittwoch noch.
Gleichfalls und viele Grüße,
Robert
Hallo Robert.
Hm … Schon einmal testweise „rss.gz“ an Stelle von „rss.xml.gz“ versucht?
Auch gut:
$ curl -I --compressed http://freihoch2.nerdbox.de/personal/rss.gz
HTTP/1.1 404 Not Found
Ich meinte eigentlich, die „rss.xml.gz“ in „rss.gz“ umzubenennen.
Einen schönen Mittwoch noch.
Gleichfalls und viele Grüße,
Danke.
Gruß, Mathias
Moin Mathias!
Ich meinte eigentlich, die „rss.xml.gz“ in „rss.gz“ umzubenennen.
Was soll das denn bringen? Wenn ich nur …rss anfordere, bekomme ich jetzt schon die komprimierte Version, in der Hinsicht funktioniert Content Negotiation wie zu erwarten.
Viele Grüße,
Robert
Hallo Robert.
Ich meinte eigentlich, die „rss.xml.gz“ in „rss.gz“ umzubenennen.
Was soll das denn bringen? Wenn ich nur …rss anfordere, bekomme ich jetzt schon die komprimierte Version, in der Hinsicht funktioniert Content Negotiation wie zu erwarten.
Oh, Verzeihung. Ich meinte dein Ziel wäre was eines der meinigen ist: Verzicht auf jegliche „Dateierweiterungen“ in URIs.
Einen schönen Donnerstag noch.
Gruß, Mathias
Moin Mathias!
Oh, Verzeihung. Ich meinte dein Ziel wäre was eines der meinigen ist: Verzicht auf jegliche „Dateierweiterungen“ in URIs.
Nönö, das funktioniert auch so, wie es soll. Naja, was solls, dann gibts halt „Content Negotiation für Arme“:
Action application/x-gzip /cgi-bin/…
Vielen Dank und ein frohes Neues,
Robert