
Este projeto está incorporando os ativos e configurações de caldeira HTML5 na estrutura Synopse Mormot :
mORMotBP ao seu caminho da biblioteca IDEAssets.res de arquivos de recursos ."..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"Substitua
"..Tools"para MORMORBP LOCALIZAÇÃO DE DIRETÓRIO FULLO.
TSQLHttpServer por TBoilerplateHTTPServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz e resedit ). Isso permite criar distribuição de arquivo único.assetslz .HTTP.sys (ver .StaticRootETag/Last-Modified ou mais amigável ou mais amigável de cache de cache Last-Modified/If-Modified-Since .Expires ou Cache-Control: max-age .bpoEnableCacheBusting e bpoEnableCacheBustingBeforeExt Options).bpoDelegateHidden e bpoDelegateBlocked ).CSP.pas para obter detalhes)..OnGetAsset )TBoilerplateHTTPServer = class (TSQLHttpServer) Para construir ou atualizar o arquivo de Assets.res sob o Lazarus IDE, use o próximo menu (quando o arquivo do projeto é aberto):
Run / Build File
Este comando de menu chama o script pré-build.sh ou pré-build.bat , que usa as ferramentas assetslz32 / assetslz64 e resedit32 / resedit64 para comprimir e incorporar ativos no ambiente Linux / Windows.
Adicione a próxima diretiva do FPC Lazarus IDE a qualquer arquivo de projeto para obter capacidade de reconstruir arquivos de recursos:
{ $IFDEF LINUX }
{ %BuildCommand pre-build.sh $ProjPath() }
{ $ENDIF }
{ $IFDEF MSWINDOWS }
{ %BuildCommand pre-build.bat "$ProjPath()" }
{ $ENDIF } Muito obrigado a Kiran Kurapaty com seu pacote BuildOptions para Delphi 5 e Delphi 7. Com base em seu código, os pacotes IDE modificados para Delphi 5/6/7/2005/2006 foram criados para permitir que os eventos de construção suportem todas as versões Delphi IDE antes do Delphi 2007, quando os eventos de construção foram introduzidos pela primeira vez.
Use o componente / instalação de pacotes / adicione o menu IDE para instalar os eventos de construção extensão IDE:
ToolsBuildEventsBuildEventsD5.bpl para Delphi 5ToolsBuildEventsBuildEventsD6.bpl para Delphi 6ToolsBuildEventsBuildEventsD7.bpl para Delphi 7ToolsBuildEventsBuildEventsD2005.bpl para Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl para Delphi 2006 Com esses eventos de construção e arquivo .bat especial, você pode imitar configurações de DEBUG e RELEASE . Por favor, consulte os eventos de compilação Readme para obter detalhes.
DEBUG recomendada Devido à natureza de compressão mais lenta do algoritmo Zopfli, não é razoável usá -lo durante o desenvolvimento e a depuração. Portanto, para todas as configurações de depuração, você pode usar a compactação rápida e de nível 1 com as opções -GZ1 -B1 opções da ferramenta de assetslz :
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE recomendada Para configuração de liberação, é recomendável ativar bpoForceHTTPS e definir a propriedade .StrictSSL como strictSSLOn ou mesmo strictSSLIncludeSubDomains . Setup .ContentSecurityPolicy Property e valide -a com o Serviço de Cabeçalhos de Segurança (consulte a Unidade CSP.pas para obter detalhes).
Server na produção Por motivos de segurança, você pode desativar totalmente Server e os cabeçalhos HTTP X-Powered-By em produção. Para fazer isso, adicione o NOXPOWEREDNAME definido para o projeto / opções / condicionais define e reconstrua tudo.
Se você usar a API HTTP.sys no servidor Windows, adicione ou modifique a próxima chave do registro para desativar a incorporação do cabeçalho HTTP Server (direitos de administrador exigidos):
Seção: SYSTEMCurrentControlSetServicesHTTPParameters
Chave: DisableServerHeader: DWORD = 2
Infelizmente, o servidor HTTP Mormot HTTP sempre usa a compactação registrada primeiro quando várias opções de compactação estiverem disponíveis. Para ativar o suporte da Brotli para o conteúdo gerado por fly (HTML, JSON, XML, etc.), faça o próximo:
Desligue a compactação deflate padrão na unidade mORMotHttpServer.pas (linha 76):
Antes
{ $define COMPRESSDEFLATE }Depois
{.$define COMPRESSDEFLATE}
Em seguida, registre as compressões do servidor HTTP em Brotli, GZip Order:
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);Você pode fornecer seus próprios ativos e redirecionamentos computáveis. Isso é útil para:
/404.html personalizado. Use o manipulador de eventos BoilerplateHTTPServer.OnGetAsset e verifique se os recursos modificáveis são tratados com suporte a vários thread. Todos os ativos externos suportam as estratégias de cache Last-Modified ETag com base na propriedade Timestamp fornecidas e podem ser enviadas estaticamente para armazenamento (por exemplo, para delegar o conteúdo transferido para a API HTTP de baixo nível). O mesmo método pode ser usado para retornar redirecionamentos personalizados para caminhos de URL específicos.
TAssets Você pode incorporar quaisquer diretórios ou arquivos no seu único arquivo executável do projeto. Isso oferece a você a capacidade de distribuir, dimensionar e executar apenas um arquivo em seus ambientes de produção. Carregue a partir de recursos e implante qualquer ativo em sua produção quando iniciado. TAssets também verifica os arquivos para obter o registro de data e hora de modificação e as alterações de tamanho antes de salvar para otimizar as operações de IO do disco.
Por exemplo, você pode compactar e embalar todos os seus ativos estáticos em Assets.res e adicionalmente embalar modelos de visualização de bigode em Views.res separadas.Res como esta:
"..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" A opção -E para visualizações significa pular qualquer compactação, porque não precisamos comprimir visualizações de bigode. Agora você pode incorporar os dois arquivos de recursos em executáveis. Adicione as próximas linhas ao seu arquivo de projeto próximo a {$R *.res} ou adicione os dois arquivos ao projeto:
{ $R Assets.res }
{ $R Views.res }Em seguida, na produção, você pode extrair visualizações de executáveis assim:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ; Com o método RegisterCustomOptions , você pode ajustar diferentes opções para diferentes caminhos de URL HTTP. Por exemplo, você pode desativar o uso de cache para suas ligações da API JSON ou algumas páginas especiais como esta:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); O TBoilerplateHTTPServer está totalmente testado com a estrutura do suíte de teste MorMot . Em vez de abordagem clássica de TDD , os cenários de desenvolvimento orientado a comportamento (BDD) são usados. Consulte TestsBoilerplateTests.pas para obter detalhes.
Este projeto adere ao versão semântica. Cada lançamento, juntamente com as instruções de migração, está documentada na página do GitHub Liberações.
O código está disponível sob a licença do MIT.
Sinta -se à vontade para entrar em contato comigo em @gmail.com : Eugene.ilyin