
該項目將HTML5樣板資產和設置嵌入了Synopse Mormot框架:
mORMotBP目錄添加到您的IDE庫路徑Assets.res用所有H5BP資源嵌入:"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"將
"..Tools"替換為MormorBP相對或完整目錄位置。
TBoilerplateHTTPServer替換TSQLHttpServer實例創建YourHTTPServerInstance.LoadFromResource('Assets'); assetslz和resedit工具)。這允許構建單個文件分佈。assetslz工具預壓縮。HTTP.sys高性能庫(請參閱.StaticRoot屬性)並免費使用服務器線程,以獲取更多有趣的工作。ETag/Last-Modified或更易於用戶友好的Last-Modified/If-Modified-Since緩存策略。Expires或Cache-Control: max-age緩存策略。bpoEnableCacheBusting和bpoEnableCacheBustingBeforeExt選項)。bpoDelegateHidden和bpoDelegateBlocked選項)。CSP.pas單元)。.OnGetAsset事件)TBoilerplateHTTPServer = class (TSQLHttpServer)在Lazarus IDE下構建或更新Assets.res文件使用下一個菜單(打開項目文件時):
Run / Build File
此菜單命令調用pre-build.sh或pre-build.bat腳本,該腳本使用assetslz32 / assetslz64和resedit32 / resedit64工具在Linux / Windows環境下壓縮和嵌入資產。
將下一個FPC Lazarus IDE指令添加到任何項目文件中,以重建資源文件:
{ $IFDEF LINUX }
{ %BuildCommand pre-build.sh $ProjPath() }
{ $ENDIF }
{ $IFDEF MSWINDOWS }
{ %BuildCommand pre-build.bat "$ProjPath()" }
{ $ENDIF } 非常感謝Kiran Kurapaty的Delphi 5和Delphi 7的BuildOptions套件。根據他的代碼,創建了Delphi 5/6/7/2005/2006的修改後的IDE套件,以啟用對Delphi IDE版本的所有Delphi IDE版本的構建活動,在Delphi 2007年之前引入了第一次構建活動。
使用組件 /安裝軟件包 /添加IDE菜單以安裝構建事件IDE擴展:
ToolsBuildEventsBuildEventsD5.bpl for delphi 5ToolsBuildEventsBuildEventsD6.bpl for delphi 6ToolsBuildEventsBuildEventsD7.bpl for delphi 7ToolsBuildEventsBuildEventsD2005.bpl for delphi 2005ToolsBuildEventsBuildEventsD2006.bpl for delphi 2006借助此構建事件和特殊的.bat文件,您可以模擬DEBUG和RELEASE配置。有關詳細信息,請參閱“構建事件”。
DEBUG配置由於Zopfli算法的壓縮性質慢80倍,在開發和調試過程中使用它是不合理的。因此,對於所有調試配置,您可以使用Assetslz工具的-GZ1 -B1選項使用快速和光級壓縮:
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE配置對於發布配置,建議打開bpoForceHTTPS ,並將.StrictSSL屬性設置為strictSSLOn甚至strictSSLIncludeSubDomains 。設置.ContentSecurityPolicy屬性並使用安全標頭服務驗證它(有關詳細信息,請參見CSP.pas單元)。
Server HTTP標頭出於安全原因,您可以通過生產中的HTTP標頭完全禁用Server和X-Powered-By 。為此,添加NOXPOWEREDNAME定義為項目 /選項 /條件定義並重建所有內容。
如果您在Windows Server上使用HTTP.sys API添加或修改下一個註冊表密鑰以禁用Server HTTP HETER嵌入(需要管理權):
部分: SYSTEMCurrentControlSetServicesHTTPParameters
鍵: DisableServerHeader: DWORD = 2
不幸的默認mormot HTTP服務器始終使用第一個註冊的壓縮,以防多個壓縮選項可用。為了啟用Brotli的支持(HTML,JSON,XML等),請執行下一個內容:
關閉mORMotHttpServer.pas單元中的默認deflate壓縮(第76行):
前
{ $define COMPRESSDEFLATE }後
{.$define COMPRESSDEFLATE}
然後在Brotli, GZip訂單:
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);您可以提供自己的可計算資產和重定向。這對:
/404.html內容服務。使用BoilerplateHTTPServer.OnGetAsset事件處理程序,並確保使用多線程支持處理可修改的資源。所有外部資產都支持ETag ,基於提供的Timestamp屬性的Last-Modified緩存策略,並且可以靜態上傳到存儲(例如,將內容Tranfer委託給低級HTTP API)。可以使用相同的方法返回特定URL路徑的自定義重定向。
TAssets用法您可以將任何目錄或文件嵌入到單個項目可執行文件中。這使您能夠在生產環境上分發,擴展並僅運行一個文件。從資源加載並在生產開始時部署任何資產。 TAssets還會檢查文件是否修改時間戳和大小更改,然後再保存以優化磁盤IO操作。
例如,您可以將所有靜態資產壓縮並包裝到Assets.res中。 RES,另外將小鬍子視圖模板包裝到單獨的Views.res中。
"..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"視圖的-E選項意味著跳過任何壓縮,因為我們不需要壓縮鬍子視圖。現在,您可以將兩個資源文件嵌入可執行文件中。將下一行添加到您的項目文件附近{$R *.res}附近或將兩個文件添加到項目:
{ $R Assets.res }
{ $R Views.res }然後,在生產中,您可以從這樣的可執行文件中提取視圖:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ;使用RegisterCustomOptions方法,您可以為不同的HTTP URL路徑調整不同的選項。例如,您可以為您的API JSON呼叫或一些類似的特殊頁面禁用緩存使用量:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]);TBoilerplateHTTPServer已全面測試,覆蓋了Mormot Test Suite框架。使用行為驅動的開發(BDD)方案而不是經典的TDD方法。有關詳細信息,請參見TestsBoilerplateTests.pas 。
該項目遵守語義版本。每個版本以及遷移說明都記錄在GitHub版本頁面上。
該代碼可根據MIT許可證獲得。
隨時通過@gmail.com與我聯繫: eugene.ilyin