Defect #1013
gzip compressed (js-)files send wrong content-type (htaccess bug)
| Status: | Completed | Start: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assigned to: | leo | % Done: | 100% |
|
| Category: | framework | |||
| Target version: | 2.7.4 |
Description
Die aktuelle htaccess-Datei lässt komprimierte JS-Dateien mit dem falschen Header ausgeben, Schuld daran sind die folgenden Anweisungen:
AddType "text/javascript" .gz AddType "text/css" .gz
Hierbei wird von der zweiten Anweisung die erste überschrieben. Besser wäre (ungetestet):
AddType "text/css" .css.gz AddType "application/javascript" .js.gz
Ob hier jetzt text/javascript, application/javascript oder application/x-javascript (letzteres versteht IE z. B. nicht) gesetzt wird, ist Geschmackssache. Die HTML-Spec sieht text/* vor, das Mime-Paket (zumindest auf Debian) gibt application/javascript vor (siehe auch http://en.wikipedia.org/wiki/Client-side_JavaScript).
History
Updated by leo 12 months ago
- Status changed from New to Completed
Kann ich nicht nachvollziehen. Bei mir wird die mootools.js.gz korrekt ausgeliefert.
HTTP/1.x 200 OK Accept-Ranges: bytes Content-Length: 18506 Content-Type: application/x-javascript
Updated by FloB 12 months ago
- Status changed from Completed to Reopened
Ich habe es grade z. B. nochmal auf http://typolight.org/bildschirmfotos.html reproduziert, sowie auf meinen Seiten (per FF-Extension "Live HTTP Headers"):
GET /plugins/mootools/mootools.js HTTP/1.1 Host: typolight.org User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 Accept: */* Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://typolight.org/bildschirmfotos.html Cookie: … HTTP/1.x 200 OK Date: Fri, 18 Sep 2009 16:47:55 GMT Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 mod_ssl/2.2.3 OpenSSL/0.9.8c Phusion_Passenger/2.1.3 Last-Modified: Thu, 30 Apr 2009 17:21:27 GMT Etag: "3fc1df-6d81-ed1273c0" Accept-Ranges: bytes Content-Length: 28033 Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Content-Type: text/css Content-Encoding: gzip
Es ist ja auch logisch, dass text/css übergeben wird, da es ja für einen Dateityp auch nur einen Mime-Typen geben kann, diese Angabe(n) überschrieben wird/werden und Apache ja nicht von der (komprimierten) Datei ablesen kann, welchen Mime-Typen sie hat.
Updated by leo 12 months ago
Tatsächlich lässt es sich auf typolight.org nachvollziehen. Leider funktioniert Deine vorgeschlagene Lösung aber nicht.
Updated by FloB 12 months ago
Das ist ärgerlich. Da müsste man vllt. mit
<Files ~ "\.(js|css)$"> … </Files>
arbeiten, oder direkt mit mod_deflate?
Updated by FloB 12 months ago
Ähm, das mit <Files> kapier ich grade selber nicht, wie man das anwenden sollte … müsste man eher per mod_rewrite machen, ich weiß aber nicht, ob man mit RewriteCond & Co einen Mime-Type setzen kann …
Möglich wäre das Einführen von neuen Dateiendungen (als Workaround) für die komprimierten Dateien: .jsz und .cssz. Wundert mich eigentlich, dass Apache mit "doppelter" Dateiendung nicht umgehen kann …
Updated by leo 12 months ago
Folgendes funktioniert bei mir:
AddEncoding gzip .gz
<FilesMatch "\.js\.gz$">
AddType "text/javascript" .gz
</FilesMatch>
<FilesMatch "\.css\.gz$">
AddType "text/css" .gz
</FilesMatch>
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME} \.(js|css)$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [QSA,L]
Also available in: Atom