2017-11-14 5 views
5

Bei tief im Code einiger beliebtesten Websites suchen, habe ich oft gesehen, dass, CSS und JavaScript Dateinamen wie diese sind,Warum Hash-CSS-Stylesheets und Javascript-Dateinamen verwenden?

<link type="text/css" rel="stylesheet" href="//sample.com/css/css__k3sYInttBtNNuJgtPSyqaYy9vVxS4qTZLrfs1ujQB9g__SH_QaIH3bnSp3nOw8n8afhszfHJlxVt51qRlrrrOnk0__fBOuweRojwN82z7EY4v-sVsMwU_P_vZSaU3fmyho6Do.css" media="all" /> 

<script type="text/javascript" src="//sample.com/js/js__-V23Vc4PVahQcqfyxss_rmNogErBARnPCvI7oPXC0qQ__O-yO5Gg8pRRaefl4d0X9qXUJTOSHq0yazxF-4tJCU_k__fBOuweRojwN82z7EY4v-sVsMwU_P_vZSaU3fmyho6Do.js"></script> 

Es scheint so, dass die Dateinamen gehasht wurde und ich don Ich weiß nicht, was der Grund ist. Also habe ich folgende Probleme.

  1. Was ist der Zweck diese Art von Methode?

  2. Ich habe gesehen Sehr komplexe Ordnernamen auch. Warum das?

  3. Gibt es irgendwelche Sicherheitsbedenken?

  4. Können wir dynamisch Datei/Ordner-Namen mit PHP für maximale Sicherheit ändern?

Ich bin etwas neu in diesem Bereich.

+4

Wenn das Bundle neu erstellt wird, ändert sich der Hash und der Browser weiß, dass er zwischengespeicherte Assets aktualisieren muss. – MysterX

+2

Die Namen werden durch Automatisierungsskripts generiert. Es verhindert Namenskollisionen und stoppt Browser-Caching-Probleme. – bassxzero

+0

^^ Das. Sie werden wahrscheinlich während des Bündelns generiert. – Archer

Antwort

5

Sie können davon ausgehen, dass diese Datei-/Ordnernamen nicht das sind, woran die Entwickler während der Entwicklungsphase arbeiten, sondern ein Artefakt des Buildprozesses der Dateien. JavaScript und CSS sind oft in einer einzigen Datei aus mehreren Quelldateien integriert, die mehr oder weniger Kompilierungs-/Transpilierungs- und Bündelungsschritte beinhalten.

Der Grund, warum Sie möchten, dass der Dateiname ein Hash der Datei ist/enthält, ist, dass diese eine Cache-Invalidierung erzwingt, wenn sich die Datei ändert. Statische Dateien können vom Browser, Server und einer Reihe anderer Agenten zwischengespeichert werden. Dies ist in Ordnung, solange sich die Datei nicht ändert. Wenn jedoch eine neue Version veröffentlicht wird, sollte dem Benutzer diese neue Version bereitgestellt werden. Wenn sich der Dateiname der Ressource ändert, fordert der Browser immer die neue Version der Datei vom Server an, anstatt eine zwischengespeicherte Version zu verwenden.

Sie sollten nicht auf komplexe Dateinamen wie diese als Sicherheit/Autorisierung Feature verlassen. Die Dateinamen werden in der Indexdatei der App referenziert und sind somit dem Endbenutzer bekannt. Auch Sicherheit durch Dunkelheit ist generell eine schlechte Idee.

+0

wird es nicht funktionieren, wenn Sie Versionen wie "http: //wxample.com/.../abc.js? v = 0.5.3" hinzufügen? Der Browser nimmt die komplette URL zusammen mit allen Parametern (falls vorhanden), oder? – mrid

+0

@mrid Ja, das würde auch den Trick machen. Aber es gibt wirklich keinen Anreiz, die Dateinamen lesbar zu halten, da in einem gut aufgebauten Build/Deployment-Prozess kein Mensch sie jemals anfassen wird.Außerdem erfordert dieser Ansatz, dass der Entwickler eine Art Versionsschema verwaltet, während ein Datei-Hash vollautomatisch berechnet werden kann. – Timo

Verwandte Themen