Defect #1013

gzip compressed (js-)files send wrong content-type (htaccess bug)

Added by FloB 12 months ago. Updated 12 months ago.

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]

Updated by leo 12 months ago

  • Status changed from Reopened to Completed

Also available in: Atom