Also, ich habe mal versucht zu verstehen, was dieses
Code:
X-Content-Type-Options: nosniff
bedeutet und mir einen Reim darauf zu machen versucht, was jetzt die Fehlermeldung hervorrufen könnte und warum sie auf dem einen Server kommt und auf dem anderen nicht.
Es bedeutet m.E., dass damit der Browser angewiesen wird, nicht selbst zu versuchen, den MIME-Typ aus dem Dateiinhalt selbst zu bestimmen, sondern gefälligst den MIME-Typ zu benutzen, mit dem die Ressource vom Server ausgeliefert wird.
Die Fehlermeldung wird wohl bedeuten, dass der Webserver einen anderen MIME-Typ für die Datei angegeben hat, als du in deinem
Code:
type="text/javascript"
Firefox gibt dann die beleidigte Leberwurst und sagt: "Jetzt habe ich hier zwei widersprüchliche Angeben für den MIME-Typ, der Server sagt es ist Typ x und im script-Tag steht y. Ich hätte ja selbst rausfinden können, was das wirklich ist, aber ich darf ja nicht, der Server hat es mir mit dem nosniff verboten.
Warum das nun auf einem Server klappt und auf dem anderen nicht, könnte damit zusammenhängen, dass hier serverseitig die Mime-Typen für Javascript unterschiedlich eingestellt sind.
Mein Server bei webgo liefert Javascript in meiner Contao 4 Testinstallation zum Beispiel wie folgt aus:
Code:
Content-Type: "application/x-javascript"
Der selbe Server bei webgo sagt dagegen in einer Contao 3 Installation
Code:
Content-Type: "application/javascript"
Ein Webserver bei Hetzner sagt in eine Contao 3 Installation ebenfalls (m.E. die korrekte Variante):
Code:
Content-Type: "application/javascript"
Tolle Sache, woher kommt der Unterschied? In der Contao 4 Testinstallation habe ich nichts in der .htaccess stehen, bei Contao 3 dagegen unter anderem:
Code:
##
# Set the proper MIME types
# @see https://github.com/h5bp/html5-boilerplate
##
<IfModule mod_mime.c>
AddType application/javascript js jsonp
AddType application/json json
AddType audio/ogg oga ogg
...
Da haben wir wohl des Rätsels Lösung. Bei einigen Servern ist da wohl als Default noch application/x-javascript eingetragen und wenn in der .htaccess nicht anders gesetzt steht es nachher so im Header. Da heißt es also, in der .htaccess die richtigen MIME-Typen zu setzen. Dem Browser hätte es wahrscheinlich kein Problem gemacht, das Javascript anhand des MIME-Typs als solches zu identifizieren, egal ob es vom Server als text/javascript, application/javascript oder application/x-javascript ausgeliefert wird. Browser sind in der Regel sehr flexiblel . Erst dadurch, dass du im script-Tag einen anderen MIME-Typ angegeben hast als der Server kam der Konflikt zustande, den der Browser dann auch nicht selbst entscheiden durfte (nosniff) und folgerichtig das Script aus Sicherheitsgründen blockiert hat. Hättest du einfach nur <script> geschrieben, was ja in HTML5 zulässig ist, wäre wohl nichts passiert. Der Browser hätte das Script als das genommen, was der Server ihm gesagt hat und wäre wohl mit allen drei Varianten klargekommen.
Lesezeichen