
该项目将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