
يدمج هذا المشروع أصول وإعدادات HTML5 BoilerPlate في إطار عمل 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 TSQLHttpServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz و resedit ). هذا يسمح ببناء توزيع ملف واحد.assetslz .HTTP.sys ذات المستوى المنخفض (انظر .StaticRoot Property) وتحرير مؤشرات ترابط الخادم الخاصة بك للحصول على عمل أكثر إثارة للاهتمام.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 .
Run / Build File
استدعاء أمر القائمة هذا قبل 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 } شكراً جزيلاً لكيران كوراباتي مع حزمة BuildOptions الخاصة به لـ Delphi 5 و Delphi 7. استنادًا إلى رمزه ، تم إنشاء حزم IDE المعدلة لـ Delphi 5/6/7/2005/2006 لتمكين دعم أحداث البناء على جميع إصدارات 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 . يرجى الاطلاع على أحداث Build ReadMe للحصول على التفاصيل.
DEBUG الموصى به بسبب 80 مرة ، فإن طبيعة الضغط البطيئة لخوارزمية Zopfli ، ليس من المعقول استخدامها أثناء التطوير والتصحيح. لذلك بالنسبة لجميع تكوينات التصحيح ، يمكنك استخدام ضغط المستوى 1 سريعًا وضوءًا مع -GZ1 -B1 خيارات AssetSlz Tool:
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE الموصى به لتكوين الإصدار ، يوصى بتشغيل bpoForceHTTPS ، وتعيين خاصية .StrictSSL إلى strictSSLOn أو حتى strictSSLIncludeSubDomains . الإعداد .ContentSecurityPolicy خاصية ContentSecurityPolicy والتحقق من صحتها مع خدمة رؤوس الأمان (انظر وحدة CSP.pas للحصول على التفاصيل).
Server HTTP على الإنتاج لأسباب أمنية ، يمكنك تعطيل Server بالكامل ورؤوس HTTP X-Powered-By على الإنتاج. للقيام بذلك ، أضف NOXPOWEREDNAME تحديد المشروع / الخيارات / التعريف الشرطي وإعادة بناء الكل.
إذا كنت تستخدم واجهة برمجة تطبيقات HTTP.sys على Windows Server ، إضافة أو تعديل مفتاح التسجيل التالي Server HTTP HEADER (حقوق المسؤول المطلوبة):
القسم: SYSTEMCurrentControlSetServicesHTTPParameters
المفتاح: DisableServerHeader: DWORD = 2
لسوء الحظ ، استخدم خادم Mormot HTTP دائمًا الضغط المسجل الأول في حالة توفر العديد من خيارات الضغط. لتمكين دعم Brotli للمحتوى الذي تم إنشاؤه أثناء التنشئة (HTML ، JSON ، XML ، إلخ).
قم بإيقاف تشغيل الضغط الافتراضي في وحدة mORMotHttpServer.pas (السطر 76):
قبل
{ $define COMPRESSDEFLATE }بعد
{.$define COMPRESSDEFLATE}
ثم قم بتسجيل ضغطات خادم HTTP في Brotli, GZip Order:
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);يمكنك توفير الأصول الخاصة بك الحاسوبية وإعادة التوجيه. هذا مفيد لـ:
/404.html . استخدم معالج أحداث BoilerplateHTTPServer.OnGetAsset وتأكد من معالجة الموارد القابلة للتعديل بدعم متعدد الخيوط. تدعم جميع الأصول الخارجية ETag ، استراتيجيات ذاكرة التخزين Last-Modified بناءً على خاصية Timestamp المقدم ويمكن تحميلها بشكل ثابت للتخزين (على سبيل المثال لتفويض المحتوى إلى API منخفض المستوى). يمكن استخدام نفس الطريقة لإرجاع إعادة التوجيه المخصص لمسارات URL محددة.
TAssets المتقدمة يمكنك تضمين أي أدلة أو ملفات في ملفك القابل للتنفيذ. يمنحك هذا القدرة على توزيع ملف واحد فقط على بيئات الإنتاج الخاصة بك. تحميل من الموارد ونشر أي أصول على إنتاجك عندما بدأت. تقوم TAssets أيضًا بالتحقق من الملفات لتعديل الطابع الزمني وتغيير الحجم قبل حفظ لتحسين عمليات القرص IO.
على Views.res المثال ، يمكنك ضغط وحزم كل الأصول الثابتة في Assets.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 ، يمكنك تعديل خيارات مختلفة لمسارات URL المختلفة HTTP. على سبيل المثال ، يمكنك تعطيل استخدام ذاكرة التخزين المؤقت لك مكالمات api json أو بعض الصفحات الخاصة مثل هذا:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); يتم اختبار TBoilerplateHTTPServer بالكامل مع إطار مجموعة اختبار Mormot . بدلاً من نهج TDD الكلاسيكي ، يتم استخدام سيناريوهات التنمية التي تعتمد على السلوك (BDD) . يرجى الاطلاع على TestsBoilerplateTests.pas للحصول على التفاصيل.
يلتزم هذا المشروع بالإصدار الدلالي. يتم توثيق كل إصدار ، إلى جانب تعليمات الترحيل ، على صفحة إصدارات GitHub.
الرمز متاح تحت رخصة معهد ماساتشوستس للتكنولوجيا.
لا تتردد في الاتصال بي على @gmail.com : eugene.ilyin