2016-04-15 9 views
8

ich eine Website, die wesentlich langsamer, als ich bin lädtWarum erzwingt Content-Security-Policy Chrome, JavaScript sequenziell zu laden?

<meta http-equiv="Content-Security-Policy" content="default-src 'self'"> 

an der Spitze der index.html Zugabe.

Nach dem Debuggen für eine Weile merke ich, dass alle JavaScript-Quellen nacheinander geladen werden, wenn dieses Meta-Tag vorhanden ist. Wenn ich diesen Tag entferne, wird Javascript parallel geladen, so dass die Website viel schneller geladen werden kann.

Um dies zu reproduzieren, schrieb ich diese leidet Probe html-Datei:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Test</title> 
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'"> 
    </head> 

    <body> 
    Hello World 
    <script src="angular.js"></script> 
    <script src="angular-animate.js"></script> 
    <script src="angular-touch.js"></script> 
    </body> 
</html> 

Hier ist das Netzwerk-Timeline mit dem "Content-Sicherheitspolitik" Meta-Tag:

timelineWithTag

Wie Man kann sehen, Ressourcen werden sequentiell geladen.

Hier ist die Netzwerk-Zeitleiste, wenn ich das "Content-Security-Policy" -Tag ENTFERNEN.

timelineWithoutTag

Wie erwartet, werden Javascript Ressourcen parallel hier geladen und die Seite fertig viel schneller auch bei kleinen Beispiel zu laden.

Gibt es eine Erklärung für dieses Verhalten? Wie kann ich das Beste aus beiden Welten haben: paralleles Laden von Javascript-Dateien und gleichzeitig aktiviertem "Content-Security-Policy"?

Die Tests wurden alle mit dem neuesten Chrome (50.0.2661.75 (64-Bit)) durchgeführt. Weder Safari noch Firefox zeigen das gleiche merkwürdige Verhalten, sie laden Javascripts parallel auch mit aktivierter "Content-Security-Policy".

+0

Dies kann Ihnen helfen,) [Eine Einführung Sicherheitspolitik zum Inhalt] (http://www.html5rocks.com/en/tutorials/security/content-security-policy/) können Sie eine erstellen "withe list", aber ich bin mir nicht sicher, ob es hilft ... –

+0

Hat Ihre Domain Cache-Header für Ihre statischen Assets wie JS-Dateien aktiviert? – TeaCode

+0

Ich bin nicht in der Lage, das zu reproduzieren, https://mobile.twitter.com/ verwendet den gleichen CSP-Header * (nicht in einem Meta-Tag, aber sollte das gleiche sein) *, und es scheint, Ressourcen in parallell gut zu laden . Sie sollten es in anderen Browsern testen und sehen, ob das Problem nur in Chrome auftritt. – adeneo

Antwort

0

Dies ist nicht reproduzierbar auf einem MAC diese drei Dateien von localhost in wenigen Millisekunden und parallel Caching ausgeschaltet

Chrome 49.0.2623.110 (64-bit) 
Chrome 50.0.2661.75 (64-bit) 

Beiden Browser verwenden zu dienen.

Ich habe es auch auf einem Remote-Server versucht, dh nicht localhost und beide verlangsamt, aber alle Dateien wurden parallel geladen, dh ich konnte keinen Unterschied mit und ohne CSP ein- oder ausgeschaltet sehen.

Ich glaube, es gab eine Mozilla-Änderung, um C++ für CSP zu verwenden, aber das war vor Jahren und würde Chrome nicht beeinflussen.

https://blog.mozilla.org/security/2014/09/10/faster-csp/

+0

Vielen Dank für das Testen. Ich führe meine Tests auf Chrome 50.0.2661.75 (64-Bit) auch auf einem MAC durch. Ich habe auch unter Windows 10 auf Chrome getestet und bin immer noch in der Lage, die Skriptdateien sequenziell zu laden. Verwenden Sie auch Chrome-Entwicklungstools, um das Ladeverhalten zu beobachten? Könnten Sie bitte www.sonopad.com/krono als Test öffnen. Dort hosste ich meine eigenen Dateien des Tests. Vielleicht etwas in der Art, wie der Server sie bedient, macht einen Unterschied? – bluegaspode

Verwandte Themen