
Este proyecto está incrustando los activos y configuraciones HTML5 Boilerplate en el marco de Mormot Synopse :
mORMotBP a su ruta de biblioteca IDEAssets.res de archivos de recursos ."..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"Reemplace
"..Tools"a la ubicación de MormorBP relativo o del directorio completo.
TSQLHttpServer con TBoilerplateHTTPServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz y resedit Herramientas). Esto permite crear distribución de un solo archivo.assetslz .HTTP.sys de bajo nivel (consulte la propiedad .StaticRoot ) y libera sus hilos de servidor para un trabajo más interesante.ETag/Last-Modified o más fácil de usar Las estrategias de caché Last-Modified/If-Modified-Since .Expires o Cache-Control: max-age .bpoEnableCacheBusting y bpoEnableCacheBustingBeforeExt Opciones).bpoDelegateHidden y bpoDelegateBlocked ).CSP.pas para más detalles)..OnGetAsset Evento)TBoilerplateHTTPServer = class (TSQLHttpServer) Para construir o actualizar el archivo Assets.res en Lazarus IDE, use el siguiente menú (cuando se abra el archivo del proyecto):
Run / Build File
Este comando de menú llame a pre-build.sh o pre-build.bat script que usa assetslz32 / assetslz64 y resedit32 / resedit64 herramientas para comprimir e incrustar activos en el entorno Linux / Windows.
Agregue la siguiente directiva FPC Lazarus IDE a cualquier archivo de proyecto para la capacidad de reconstruir archivos de recursos:
{ $IFDEF LINUX }
{ %BuildCommand pre-build.sh $ProjPath() }
{ $ENDIF }
{ $IFDEF MSWINDOWS }
{ %BuildCommand pre-build.bat "$ProjPath()" }
{ $ENDIF } Muchas gracias a Kiran Kurapaty con su paquete Buildoptions para Delphi 5 y Delphi 7. Según su código, los paquetes IDE modificados para Delphi 5/6/7/2005/2006 se crearon para permitir el soporte de eventos de compilación en todas las versiones de Delphi IDE antes de Delphi 2007, donde se introdujeron los eventos de construcción por primera vez.
Use el menú de paquetes de componentes / instalaciones / Agregar IDE para instalar eventos de compilación Extensión IDE:
ToolsBuildEventsBuildEventsD5.bpl para Delphi 5ToolsBuildEventsBuildEventsD6.bpl para Delphi 6ToolsBuildEventsBuildEventsD7.bpl para Delphi 7ToolsBuildEventsBuildEventsD2005.bpl para Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl para Delphi 2006 Con estos eventos de compilación y archivo .bat especial, puede emular configuraciones DEBUG y RELEASE . Consulte el ReadMe de Build Events para más detalles.
DEBUG recomendada Debido a la naturaleza de compresión más lenta del algoritmo Zopfli, no es razonable usarlo durante el desarrollo y la depuración. Entonces, para todas las configuraciones de depuración, puede usar la compresión de nivel 1 rápido y de luz con las opciones -GZ1 -B1 de la herramienta AssetsLZ :
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE recomendada Para la configuración de lanzamiento, se recomienda activar bpoForceHTTPS y establecer la propiedad .StrictSSL a strictSSLOn o incluso strictSSLIncludeSubDomains . Configurar .ContentSecurityPolicy Propiedad y validarla con el servicio de encabezados de seguridad (consulte la unidad CSP.pas para más detalles).
Server en la producción Por razones de seguridad, puede deshabilitar completamente los encabezados HTTP Server y X-Powered-By en producción. Para hacer esto, Agregue NOXPOWEREDNAME Define a Project / Opciones / Condicional Defines y reconstruya todo.
Si usa la API HTTP.sys en Windows Server Agregar o modificar la siguiente clave de registro para deshabilitar la incrustación del encabezado HTTP Server (derechos de administrador requeridos):
Sección: SYSTEMCurrentControlSetServicesHTTPParameters
Clave: DisableServerHeader: DWORD = 2
Desafortunadamente el servidor HTTP Mormot Predetelly siempre use la primera compresión registrada en caso de que hay varias opciones de compresión disponibles. Para habilitar el soporte de Brotli para el contenido generado (HTML, JSON, XML, etc.), haga el siguiente:
Apague la compresión de desinflar predeterminada en mORMotHttpServer.pas Unidad (línea 76):
Antes
{ $define COMPRESSDEFLATE }Después
{.$define COMPRESSDEFLATE}
Luego registre las compresiones del servidor HTTP en Brotli, GZip :
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);Puede proporcionar sus propios activos y redireccionamientos computables. Esto es útil para:
/404.html personalizado. Use el manejador de eventos BoilerplateHTTPServer.OnGetAsset y asegúrese de que los recursos modificables se manejen con soporte de múltiples subprocesos. Todos los activos externos admiten estrategias de caché ETag , Last-Modified basadas en la propiedad Timestamp proporcionada y pueden cargarse estáticamente en el almacenamiento (por ejemplo, para delegar la transmisión de contenido a la API HTTP de bajo nivel). Se puede usar el mismo método para devolver redirecciones personalizadas para rutas de URL específicas.
TAssets Puede incrustar cualquier director de directorios o archivos en su archivo ejecutable de proyecto único . Esto le brinda la capacidad de distribuir, escalar y ejecutar solo un archivo en sus entornos de producción. Cargue desde recursos e implementa cualquier activo en su producción cuando comenzó. TAssets también verifican los archivos para la marca de tiempo de modificación y los cambios en el tamaño antes de guardar para optimizar las operaciones de disco IO.
Por ejemplo, puede comprimir y empacar todos sus activos estáticos en Assets.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" La opción -E para vistas significa omitir cualquier compresión porque no necesitamos comprimir las vistas de bigote. Ahora puede incrustar ambos archivos de recursos en ejecutables. Agregue las siguientes líneas a su archivo de proyecto cerca de {$R *.res} o agregue ambos archivos al proyecto:
{ $R Assets.res }
{ $R Views.res }Luego, en la producción, puede extraer vistas del ejecutable como este:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ; Con el método RegisterCustomOptions , puede ajustar diferentes opciones para diferentes rutas de URL HTTP. Por ejemplo, puede deshabilitar el uso de caché para sus llamadas API JSON o algunas páginas especiales como esta:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); El TBoilerplateHTTPServer está completamente cubierto con el marco de la suite de prueba mormot . En lugar del enfoque clásico de TDD , se utilizan los escenarios de desarrollo basado en el comportamiento (BDD) . Consulte TestsBoilerplateTests.pas para más detalles.
Este proyecto se adhiere a la versiones semánticas. Cada lanzamiento, junto con las instrucciones de migración, se documenta en la página de versiones de GitHub.
El código está disponible bajo la licencia MIT.
No dude en contactarme en @gmail.com : eugene.ilyin