
Ce projet est en train d'intégrer des actifs et des paramètres HTML5 en passe- partout dans le cadre Synopse Mormot :
mORMotBP à votre chemin de bibliothèque IDEAssets.res avec toutes les ressources H5BP intégrées:"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"Remplacez
"..Tools"à MormorBP relatif ou emplacement complet du répertoire.
TSQLHttpServer par TBoilerplateHTTPServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz et outils resedit ). Cela permet de créer une distribution de fichiers unique.assetslz .HTTP.sys de bas niveau (voir .StaticRoot Propriété) et libérer vos threads de serveur pour un travail plus intéressant.ETag/Last-Modified ou plus de stratégies de cache Last-Modified/If-Modified-Since par les utilisateurs.Expires ou Cache-Control: max-age .bpoEnableCacheBusting et bpoEnableCacheBustingBeforeExt Options).bpoDelegateHidden et bpoDelegateBlocked ).CSP.pas pour plus de détails)..OnGetAsset )TBoilerplateHTTPServer = class (TSQLHttpServer) Pour construire ou mettre à jour Assets.res Fichier sous Lazarus IDE Utilisez le menu suivant (lorsque le fichier de projet est ouvert):
Run / Build File
Cette commande de menu appelle le script pré-build.sh ou pré-build.bat qui utilise des outils assetslz32 / assetslz64 et resedit32 / resedit64 pour comprimer et intégrer des actifs dans l'environnement Linux / Windows.
Ajoutez la prochaine directive FPC Lazarus IDE à n'importe quel fichier de projet pour la possibilité de reconstruire des fichiers de ressources:
{ $IFDEF LINUX }
{ %BuildCommand pre-build.sh $ProjPath() }
{ $ENDIF }
{ $IFDEF MSWINDOWS }
{ %BuildCommand pre-build.bat "$ProjPath()" }
{ $ENDIF } Un grand merci à Kiran Kurapaty avec son package BuildOptions pour Delphi 5 et Delphi 7. En fonction de son code, les packages IDE modifiés pour Delphi 5/6/7/2005/2006 ont été créés pour permettre la prise en charge des événements de construction sur toutes les versions de Delphi IDE avant Delphi 2007, où les événements de construction ont été introduits pour la première fois.
Utilisez des packages de composants / installer / ajouter le menu IDE pour installer des événements de construction Extension IDE:
ToolsBuildEventsBuildEventsD5.bpl pour Delphi 5ToolsBuildEventsBuildEventsD6.bpl pour Delphi 6ToolsBuildEventsBuildEventsD7.bpl pour Delphi 7ToolsBuildEventsBuildEventsD2005.bpl pour Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl pour Delphi 2006 Avec ces événements de construction et le fichier .bat spécial, vous pouvez imiter les configurations DEBUG et RELEASE . Veuillez consulter les événements de construction Readme pour plus de détails.
DEBUG recommandé En raison de 80 fois la nature de compression plus lente de l'algorithme ZOPFLI, il n'est pas raisonnable de l'utiliser pendant le développement et le débogage. Ainsi, pour toutes les configurations de débogage, vous pouvez utiliser une compression rapide et lumineuse 1 avec -GZ1 -B1 Options d'outil Assetslz :
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE recommandée Pour la configuration de la libération, il est recommandé d'activer bpoForceHTTPS et de définir la propriété .StrictSSL pour strictSSLOn ou même strictSSLIncludeSubDomains . Configuration .ContentSecurityPolicy Property et validez-la avec le service des en-têtes de sécurité (voir l'unité CSP.pas pour plus de détails).
Server sur la production Pour des raisons de sécurité, vous pouvez désactiver pleinement Server et les en-têtes HTTP X-Powered-By sur la production. Pour ce faire, ajoutez NOXPOWEREDNAME , définissez-vous au projet / options / conditionnels définir et reconstruire tout.
Si vous utilisez l'API HTTP.sys sur Windows Server, Ajoutez ou modifiez la touche de registre suivante pour désactiver Server HTTP En-tête d'intégration (Droits d'administration requis):
Section: SYSTEMCurrentControlSetServicesHTTPParameters
Clé: DisableServerHeader: DWORD = 2
Malheureusement, le serveur HTTP Mormot par défaut utilise toujours la première compression enregistrée au cas où plusieurs options de compression sont disponibles. Pour activer la prise en charge de Brotli pour le contenu généré à la volée (HTML, JSON, XML, etc.) faites le suivant:
Désactivez la compression de dégonflage par défaut dans mORMotHttpServer.pas Unité (ligne 76):
Avant
{ $define COMPRESSDEFLATE }Après
{.$define COMPRESSDEFLATE}
Ensuite, enregistrez les compressions de serveur HTTP dans Brotli, GZip Order:
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);Vous pouvez fournir vos propres actifs et redirectes calculables. Ceci est utile pour:
/404.html personnalisé. Utilisez BoilerplateHTTPServer.OnGetAsset Event Handler et assurez-vous que les ressources modifiables sont gérées avec un support multi-thread. Tous les actifs externes prennent en charge ETag , les stratégies de cache Last-Modified basées sur la propriété Timestamp fournie et peuvent être téléchargées statiquement sur le stockage (par exemple pour déléguer le transformateur de contenu à l'API HTTP à bas niveau). La même méthode peut être utilisée pour retourner les redirections personnalisées pour des chemins d'urgence spécifiques.
TAssets Vous pouvez intégrer tous les répertoires ou fichiers dans votre fichier exécutable de projet unique . Cela vous donne la possibilité de distribuer, d'échelle et d'exécuter un seul fichier sur vos environnements de production. Chargez à partir de la ressource et déployez tous les actifs sur votre production au début. TAssets vérifie également les fichiers pour les modifications de l'horodatage et de la taille de modification avant d'enregistrer pour optimiser les opérations IO de disque.
Par exemple, vous pouvez compresser et emballer tous les actifs statiques en Assets.res et emballer en outre des modèles de vue de moustache dans Views.res distinctes.
"..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" L'option -E pour les vues signifie ignorer toute compression car nous n'avons pas besoin de compresser les vues de moustache. Vous pouvez maintenant intégrer les deux fichiers de ressources en exécutable. Ajoutez les lignes suivantes au fichier de projet près de {$R *.res} ou ajoutez les deux fichiers au projet:
{ $R Assets.res }
{ $R Views.res }Ensuite, en production, vous pouvez extraire des vues à partir de l'exécutable comme ceci:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ; Avec la méthode RegisterCustomOptions , vous pouvez modifier différentes options pour différents chemins URL HTTP. Par exemple, vous pouvez désactiver l'utilisation du cache pour vos appels API JSON ou quelques pages spéciales comme celle-ci:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); Le TBoilerplateHTTPServer est entièrement test couvert avec un cadre de suite de test Mormot . Au lieu de l'approche du TDD classique, les scénarios de développement axés sur le comportement (BDD) sont utilisés. Veuillez consulter TestsBoilerplateTests.pas pour plus de détails.
Ce projet adhère au versioning sémantique. Chaque version, ainsi que les instructions de migration, sont documentées sur la page GitHub Releases.
Le code est disponible sous la licence MIT.
N'hésitez pas à me contacter sur @ gmail.com : eugene.ilyin