
In diesem Projekt werden HTML5 -Kesselplatten -Assets und -Stumationen in Synopse Mormot Framework eingebettet:
mORMotBP -Verzeichnis hinzuAssets.res mit allen eingebetteten H5BP -Ressourcen zu erstellen:"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"Ersetzen Sie
"..Tools"an mormorbp relativ oder volles Verzeichnisort.
TSQLHttpServer -Instanz durch TBoilerplateHTTPServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz und resedit -Tools). Dies ermöglicht das Erstellen einer Einzeldateiverteilung.assetslz -Tool vorkomprimiert.HTTP.sys mit niedrigem Niveau übertragen werden (siehe .StaticRoot -Eigenschaft), und kostenlos für interessantere Arbeiten.ETag/Last-Modified oder benutzerfreundlicherer Last-Modified/If-Modified-Since Cache-Strategien.Expires oder Cache-Control: max-age Cache-Strategien.bpoEnableCacheBusting und bpoEnableCacheBustingBeforeExt -Optionen).bpoDelegateHidden und bpoDelegateBlocked -Optionen).CSP.pas -Einheit)..OnGetAsset -Ereignis)TBoilerplateHTTPServer = class (TSQLHttpServer) So erstellen oder aktualisieren Sie Assets.res -Datei unter Lazarus IDE. Verwenden Sie das nächste Menü (wenn die Projektdatei geöffnet wird):
Run / Build File
In diesem Menübefehl rufen Sie Pre-Build.sh- oder Pre-Build.bat -Skript auf, das assetslz32 / assetslz64 und resedit32 / resedit64 Tools verwendet, um Assets in Linux / Windows-Umgebung zu komprimieren und einbetten.
Fügen Sie die nächste FPC Lazarus IDE -Anweisung zu einer beliebigen Projektdatei hinzu, um Ressourcendateien wieder aufzubauen:
{ $IFDEF LINUX }
{ %BuildCommand pre-build.sh $ProjPath() }
{ $ENDIF }
{ $IFDEF MSWINDOWS }
{ %BuildCommand pre-build.bat "$ProjPath()" }
{ $ENDIF } Vielen Dank an Kiran Kurapaty mit seinem Buildoptions -Paket für Delphi 5 und Delphi 7. Basierend auf seinem Code wurden die modifizierten IDE -Pakete für Delphi 5/6/7/2005/2006 erstellt, um vor Delphi 2007 die Unterstützung von Build -Ereignissen für alle Delphi -IDE -Versionen zu aktivieren.
Verwenden Sie die Komponenten- / Installationspakete / IDE -Menü hinzufügen, um Build -Ereignisse IDE -Erweiterung zu installieren:
ToolsBuildEventsBuildEventsD5.bpl für Delphi 5ToolsBuildEventsBuildEventsD6.bpl für Delphi 6ToolsBuildEventsBuildEventsD7.bpl für Delphi 7ToolsBuildEventsBuildEventsD2005.bpl für Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl für Delphi 2006 Mit diesen Build -Ereignissen und einer speziellen .bat -Datei können Sie DEBUG und RELEASE -Konfigurationen emulieren. Weitere Informationen finden Sie in der Build Events Readme.
DEBUG -Konfiguration Aufgrund der 80 -mal langsameren Kompression des Zopfli -Algorithmus ist es nicht vernünftig, ihn während der Entwicklung und des Debuggens zu verwenden. Für alle Debug -Konfigurationen können Sie also eine schnelle und Lichtstufe 1 -Komprimierung mit -GZ1 -B1 -Optionen des Assetslz -Tools verwenden:
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE Für die Freilassungskonfiguration wird empfohlen, bpoForceHTTPS einzuschalten und .StrictSSL Eigenschaften in strictSSLOn oder sogar strictSSLIncludeSubDomains festzulegen. Setup .ContentSecurityPolicy -Eigenschaft und validieren Sie sie mit Sicherheitsheader -Service (Einzelheiten siehe CSP.pas -Einheit).
Server bei der Produktion Aus Sicherheitsgründen können Sie Server und HTTP-Header X-Powered-By für die Produktion vollständig deaktivieren. Fügen Sie dazu NOXPOWEREDNAME Define zu Projekt / Optionen / bedingten Definierungen hinzu und bauen Sie alles wieder auf.
Wenn Sie HTTP.sys -API auf Windows Server verwenden, fügen Sie den nächsten Registrierungsschlüssel hinzu oder ändern Sie, um Server -HTTP -Header einzubetten (Admin -Rechte erforderlich):
Abschnitt: SYSTEMCurrentControlSetServicesHTTPParameters
Schlüssel: DisableServerHeader: DWORD = 2
Ungleiche Standard -Mormot -HTTP -Server verwenden immer zuerst die zuerst registrierte Komprimierung, falls mehrere Komprimierungsoptionen verfügbar sind. Um die Brotli-Unterstützung für den generierten (HTML, JSON, XML usw.) in der Fliege zu aktivieren, tun Sie den nächsten:
Schalten Sie die Standard -Deflat -Komprimierung in mORMotHttpServer.pas -Einheit (Zeile 76) aus:
Vor
{ $define COMPRESSDEFLATE }Nach
{.$define COMPRESSDEFLATE}
Registrieren Sie dann die HTTP -Serverkompressionen in Brotli, GZip -Bestellung:
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);Sie können Ihre eigenen berechnungsbaren Vermögenswerte und Weiterleitungen bereitstellen. Dies ist nützlich für:
/404.html Content Service. Verwenden Sie BoilerplateHTTPServer.OnGetAsset -Event-Handler und stellen Sie sicher, dass modifizierbare Ressourcen mit Multi-Thread-Unterstützung behandelt werden. Alle externen Vermögenswerte unterstützen ETag , Last-Modified Cache-Strategien basierend auf der bereitgestellten Timestamp und können statisch auf Speicher geladen werden (z. B. um den Inhalt von HTTP-API auf niedriger Ebene zu delegieren). Die gleiche Methode kann verwendet werden, um benutzerdefinierte Umleitungen für bestimmte URL -Pfade zurückzugeben.
TAssets -Nutzung Sie können alle Verzeichnisse oder Dateien in Ihre ausführbare Projektdatei einbetten. Auf diese Weise können Sie nur eine Datei in Ihren Produktionsumgebungen verteilen, skalieren und ausführen. Laden Sie von Ressourcen und stellen Sie bei Beginn der Produktion alle Vermögenswerte für Ihre Produktion ein. TAssets überprüft auch Dateien auf Änderungen Zeitstempel und Größenänderungen vor dem Speichern, um die Disk -IO -Vorgänge zu optimieren.
Sie können beispielsweise alle statischen Assets in Assets.res komprimieren und einpacken und zusätzlich Schnurrbartansichtsvorlagen in separate Views.res einfügen.
"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp""..Toolsassetslz" -E "$(PROJECTDIR)Views" "$(PROJECTDIR)Views.tmp""..Toolsresedit" -D "$(PROJECTDIR)Views.res" rcdata VIEWS "$(PROJECTDIR)Views.tmp" Die Option -E für Ansichten bedeutet, eine Komprimierung zu überspringen, da wir keine Schnurrbartansichten komprimieren müssen. Jetzt können Sie beide Ressourcendateien in ausführbare Dateien einbetten. Fügen Sie Ihrer Projektdatei in der Nähe von {$R *.res} die nächsten Zeilen hinzu oder fügen Sie beide Dateien zum Projekt hinzu:
{ $R Assets.res }
{ $R Views.res }Bei der Produktion können Sie Ansichten aus der ausführbaren Datei wie folgt extrahieren:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ; Mit der RegisterCustomOptions -Methode können Sie verschiedene Optionen für verschiedene HTTP -URL -Pfade optimieren. Beispielsweise können Sie die Cache -Nutzung für Ihre API -JSON -Anrufe oder einige spezielle Seiten wie diese deaktivieren:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); Der TBoilerplateHTTPServer wird vollständig mit einem Mormot -Testsuite -Framework getestet. Anstelle eines klassischen TDD -Ansatzes werden die Szenarien für verhaltensgetriebene Entwicklung (BDD) verwendet. Weitere Informationen finden Sie unter TestsBoilerplateTests.pas .
Dieses Projekt hält sich der semantischen Versionierung an. Jede Version zusammen mit den Migrationsanweisungen ist auf der Seite GitHub Releases dokumentiert.
Der Code ist unter der MIT -Lizenz verfügbar.
Fühlen Sie sich frei, mich unter @gmail.com zu kontaktieren: eugene.ylyin