
โครงการนี้กำลังฝังสินทรัพย์และการตั้งค่า HTML5 Boilerplate และการตั้งค่าลงใน Synopse Mormot Framework :
mORMotBP ไปยังเส้นทางไลบรารี IDE ของคุณAssets.res ด้วยทรัพยากร H5BP ทั้งหมดที่ฝังอยู่:"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"แทนที่
"..Tools"เป็น mormorbp สัมพัทธ์หรือตำแหน่งไดเรกทอรีเต็ม
TSQLHttpServer ด้วย TBoilerplateHTTPServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz และเครื่องมือ resedit ) สิ่งนี้ช่วยให้สามารถสร้างการกระจายไฟล์เดียวassetslzHTTP.sys ระดับต่ำ (ดูคุณสมบัติ .StaticRoot ) และฟรีเธรดเซิร์ฟเวอร์ของคุณสำหรับงานที่น่าสนใจยิ่งขึ้นETag/Last-Modified หรือใช้กลยุทธ์แคช Last-Modified/If-Modified-Since มากขึ้นExpires หรือ Cache-Control: max-agebpoEnableCacheBusting และ 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 } ต้องขอบคุณ Kiran Kurapaty ด้วยแพ็คเกจ Buildoptions ของเขาสำหรับ Delphi 5 และ Delphi 7 ตามรหัสของเขาแพ็คเกจ IDE ที่แก้ไขแล้วสำหรับ Delphi 5/6/7/2005/2006 ถูกสร้างขึ้นเพื่อเปิดใช้งานการสนับสนุนการสร้างกิจกรรมในทุกรุ่น Delphi IDE ก่อนที่ Delphi 2007
ใช้ ส่วนประกอบ / ติดตั้งแพ็คเกจ / เพิ่ม เมนู ide เพื่อติดตั้ง การสร้างกิจกรรม ส่วนขยาย IDE:
ToolsBuildEventsBuildEventsD5.bpl สำหรับ Delphi 5ToolsBuildEventsBuildEventsD6.bpl สำหรับ Delphi 6ToolsBuildEventsBuildEventsD7.bpl สำหรับ Delphi 7ToolsBuildEventsBuildEventsD2005.bpl สำหรับ Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl สำหรับ Delphi 2006 ด้วยเหตุการณ์การสร้างนี้และไฟล์ .bat พิเศษคุณสามารถเลียนแบบ DEBUG และการกำหนดค่าการกำหนด RELEASE โปรดดูรายละเอียดของ Build Events Readme
DEBUG ที่แนะนำ เนื่องจากลักษณะการบีบอัดช้าลง 80 เท่าของอัลกอริทึม Zopfli จึงไม่สมเหตุสมผลที่จะใช้ในระหว่างการพัฒนาและการดีบัก ดังนั้นสำหรับการกำหนดค่าการดีบักทั้งหมดคุณสามารถใช้การบีบอัดระดับที่รวดเร็วและแสง 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 การตั้งค่าคุณสมบัติ .ContentSecurityPolicy การรักษาความปลอดภัยและตรวจสอบความถูกต้องด้วยบริการส่วนหัวความปลอดภัย (ดูรายละเอียดหน่วย CSP.pas สำหรับรายละเอียด)
Server HTTP ในการผลิต ด้วยเหตุผลด้านความปลอดภัยคุณสามารถปิดการใช้ Server และส่วนหัว HTTP X-Powered-By ได้อย่างสมบูรณ์ในการผลิต ในการทำเช่นนี้เพิ่ม NOXPOWEREDNAME กำหนดให้ โครงการ / ตัวเลือก / การกำหนดเงื่อนไข และสร้างใหม่ทั้งหมด
หากคุณใช้ HTTP.sys API บน Windows Server เพิ่มหรือแก้ไขคีย์รีจิสตรีถัดไปเพื่อปิดใช้งานการฝังส่วนหัว Server HTTP (ต้องการสิทธิ์ผู้ดูแลระบบ):
ส่วน: SYSTEMCurrentControlSetServicesHTTPParameters
คีย์: DisableServerHeader: DWORD = 2
โชคไม่ดีเริ่มต้น Mormot HTTP Server มักจะใช้การบีบอัดที่ลงทะเบียนครั้งแรกในกรณีที่มีตัวเลือกการบีบอัดหลายตัว เพื่อเปิดใช้งานการสนับสนุน Brotli สำหรับเนื้อหาที่สร้างขึ้น (HTML, JSON, XML ฯลฯ ) ทำต่อไป:
ปิดการบีบอัด deflate เริ่มต้นใน mORMotHttpServer.pas unit (บรรทัด 76):
ก่อน
{ $define COMPRESSDEFLATE }หลังจาก
{.$define COMPRESSDEFLATE}
จากนั้นลงทะเบียนการบีบอัดเซิร์ฟเวอร์ HTTP ใน Brotli, GZip :
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);คุณสามารถจัดหาสินทรัพย์และการเปลี่ยนเส้นทางของคุณเอง สิ่งนี้มีประโยชน์สำหรับ:
/404.html ที่กำหนดเอง ใช้ตัวจัดการเหตุการณ์ BoilerplateHTTPServer.OnGetAsset และตรวจสอบให้แน่ใจว่าทรัพยากรที่ปรับเปลี่ยนได้นั้นได้รับการจัดการด้วยการสนับสนุนแบบมัลติเธรด สินทรัพย์ภายนอกทั้งหมดสนับสนุน ETag กลยุทธ์แคช Last-Modified ตามคุณสมบัติ Timestamp ที่ให้ไว้และสามารถอัปโหลดไปยังพื้นที่เก็บข้อมูลได้อย่างคงที่ (ตัวอย่างเช่นการมอบหมายเนื้อหาการถ่ายโอนเนื้อหาไปยัง HTTP API ระดับต่ำ) วิธีเดียวกันสามารถใช้เพื่อส่งคืนเส้นทางการเปลี่ยนเส้นทางที่กำหนดเองสำหรับเส้นทาง URL ที่เฉพาะเจาะจง
TAssets ขั้นสูง คุณสามารถฝังไดเรกทอรีหรือไฟล์ใด ๆ ลงในไฟล์ปฏิบัติการโครงการ เดียว ของคุณ สิ่งนี้จะช่วยให้คุณสามารถแจกจ่ายปรับขนาดและเรียกใช้เพียงไฟล์เดียวในสภาพแวดล้อมการผลิตของคุณ โหลดจากทรัพยากรและปรับใช้สินทรัพย์ใด ๆ ในการผลิตของคุณเมื่อเริ่มต้น TAssets ยังตรวจสอบไฟล์สำหรับการปรับเปลี่ยนเวลาและการเปลี่ยนแปลงขนาดก่อนที่จะบันทึกเพื่อเพิ่มประสิทธิภาพการทำงานของดิสก์ IO
ตัวอย่างเช่นคุณสามารถบีบอัดและแพ็คสินทรัพย์คงที่ทั้งหมดของคุณลงใน 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} หรือเพิ่มทั้งสองไฟล์ลงในโครงการ:
{ $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 Reasees
รหัสมีอยู่ภายใต้ใบอนุญาต MIT
อย่าลังเลที่จะติดต่อฉันที่ @gmail.com : Eugene.ilyin