
Этот проект внедряет активы и настройки HTML5 Boilerplate и настройки в Synopse Mormot Framework :
mORMotBP в свой путь библиотеки IDEAssets.res со всеми встроенными ресурсами H5BP :"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"Замените
"..Tools"на относительное или полное местоположение в полном каталоге.
TBoilerplateHTTPServer создание экземпляра TSQLHttpServerYourHTTPServerInstance.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) Для создания или обновления файла Assets.res под Lazarus IDE Используйте следующее меню (когда открыт файл проекта):
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 } Большое спасибо Кирану Курапати с его пакетом сборки Delphi 5 и Delphi 7. На основании его кода были созданы модифицированные пакеты IDE для Delphi 5/6/7/2005/2006, чтобы обеспечить поддержку событий сборки на всех версиях Delphi IDE до Delphi 2007, где события сборки были представлены в первый раз.
Используйте компонент / Установка пакеты / добавить меню IDE, чтобы установить Event Events Event Event:
ToolsBuildEventsBuildEventsD5.bpl для Delphi 5ToolsBuildEventsBuildEventsD6.bpl для Delphi 6ToolsBuildEventsBuildEventsD7.bpl для Delphi 7ToolsBuildEventsBuildEventsD2005.bpl для Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl для Delphi 2006 С помощью этих событий сборки и специального файла .bat вы можете подражать DEBUG и RELEASE конфигурации. Пожалуйста, смотрите события Build Readme для получения подробной информации.
DEBUG Из -за в 80 раз медленнее сжатие сжатия алгоритма Zopfli не разумно использовать его во время разработки и отладки. Таким образом, для всех конфигураций отладки вы можете использовать быстрое и сжатие Light 1 Level 1 с параметрами -GZ1 -B1 инструмента Assetslz :
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE Для конфигурации выпуска рекомендуется включить bpoForceHTTPS и установить свойство .StrictSSL на strictSSLOn или даже strictSSLIncludeSubDomains . Setup .ContentSecurityPolicy свойство и подтвердите его с помощью службы заголовков безопасности (подробности см. В блоке CSP.pas ).
Server HTTP на производстве По соображениям безопасности вы можете полностью отключить заголовки Server и X-Powered-By на производстве. Для этого добавить NOXPOWEREDNAME определить для проекта / опций / условных определений и восстановления всех.
Если вы используете HTTP.sys API в Windows Server, добавьте или измените следующий ключ реестра для отключения Server HTTP Header Entriding (требуются права администратора):
Раздел: SYSTEMCurrentControlSetServicesHTTPParameters
Ключ: DisableServerHeader: DWORD = 2
К сожалению, Mormot HTTP -сервер по умолчанию всегда используйте первое зарегистрированное сжатие в случае, если доступно несколько параметров сжатия. Чтобы обеспечить поддержку Brotli для сгенерированного на лету (HTML, JSON, XML и т. Д.) Сделайте следующее:
Выключите сжатие дефроза по умолчанию в mORMotHttpServer.pas (строка 76):
До
{ $define COMPRESSDEFLATE }После
{.$define COMPRESSDEFLATE}
Затем зарегистрируйте сжатие HTTP Server в Brotli, GZip ORDES:
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);Вы можете предоставить свои вычислимые активы и перенаправления. Это полезно для:
/404.html Content Service. Используйте обработчик событий BoilerplateHTTPServer.OnGetAsset и убедитесь, что модифицируемые ресурсы обрабатываются с помощью многопоточной поддержки. Все внешние активы поддерживают ETag , стратегии кэша Last-Modified кэшем на основе предоставленного свойства Timestamp и могут быть статически загружать в хранилище (например, для делегирования контента Tranfer до низкого уровня HTTP API). Тот же метод может быть использован для возврата пользовательских перенаправлений для определенных путей URL.
TAssets Вы можете встроить любые каталоги или файлы в свой исполняемый файл одного проекта. Это дает вам возможность распространять, масштабировать и запускать только один файл в ваших производственных средах. Загрузите из ресурса и разверните любые активы на производство, когда он начинается. TAssets также проверяет файлы на наличие временных изменений модификации и изменений размера перед сохранением для оптимизации дисковых операций ввода -вывода.
Например, вы можете сжать и упаковать все свои статические активы в 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" Опция -E для представлений означает пропустить любое сжатие, потому что нам не нужно сжимать представления усов. Теперь вы можете встроить оба файла ресурсов в исполняемый файл. Добавьте следующие строки в файл проекта рядом с {$R *.res} или добавьте оба файла в Project:
{ $R Assets.res }
{ $R Views.res }Затем на производстве вы можете извлечь виды из исполняемого файла, как это:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ; С помощью метода RegisterCustomOptions вы можете настроить различные параметры для разных путей HTTP. Например, вы можете отключить использование кэша для вас API JSON Calls или некоторые специальные страницы, такие как это:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); TBoilerplateHTTPServer полностью покрыт тестовым набором мормот . Вместо классического подхода TDD используются сценарии развития (BDD) . Пожалуйста, смотрите TestsBoilerplateTests.pas для получения подробной информации.
Этот проект придерживается семантической версии. Каждый релиз, наряду с инструкциями по миграции, задокументирован на странице GitHub Releses.
Код доступен по лицензии MIT.
Не стесняйтесь обращаться ко мне по адресу @gmail.com : eugene.ilyin