
Proyek ini menanamkan aset dan pengaturan boilerplate html5 ke dalam kerangka kerja Sinopse Mormot :
mORMotBP ke jalur Perpustakaan IDE AndaAssets.res file sumber daya. Dengan semua sumber daya H5BP tertanam:"..Toolsassetslz" "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp"Ganti
"..Tools"ke mormorbp relatif atau lokasi direktori penuh.
TSQLHttpServer dengan TBoilerplateHTTPServerYourHTTPServerInstance.LoadFromResource('Assets'); assetslz dan resedit ). Ini memungkinkan untuk membangun distribusi file tunggal.assetslz ..StaticRoot tinggi HTTP.sysETag/Last-Modified atau lebih banyak menggunakan strategi cache Last-Modified/If-Modified-Since .Expires atau Cache-Control: max-age .bpoEnableCacheBusting dan bpoEnableCacheBustingBeforeExt ).bpoDelegateHidden dan bpoDelegateBlocked ).CSP.pas untuk detailnya)..OnGetAsset )TBoilerplateHTTPServer = class (TSQLHttpServer) Untuk membangun atau memperbarui file Assets.res di bawah Lazarus IDE Gunakan menu berikutnya (saat file proyek dibuka):
Run / Build File
Perintah menu ini panggilan pra-build.sh atau pra-build.bat skrip yang menggunakan assetslz32 / assetslz64 dan resedit32 / resedit64 alat untuk mengompres dan menanamkan aset di bawah lingkungan Linux / Windows.
Tambahkan arahan FPC Lazarus IDE berikutnya ke file proyek apa pun untuk kemampuan membangun kembali file sumber daya:
{ $IFDEF LINUX }
{ %BuildCommand pre-build.sh $ProjPath() }
{ $ENDIF }
{ $IFDEF MSWINDOWS }
{ %BuildCommand pre-build.bat "$ProjPath()" }
{ $ENDIF } Terima kasih banyak kepada Kiran Kurapaty dengan paket BuildOptions untuk Delphi 5 dan Delphi 7. Berdasarkan kodenya paket IDE yang dimodifikasi untuk Delphi 5/6/7/2005/2006 dibuat untuk memungkinkan dukungan acara Build pada semua versi Delphi IDE sebelum Delphi 2007, di mana acara pembangunan diperkenalkan untuk pertama kali.
Gunakan Komponen / Instal Paket / Tambah Menu IDE untuk menginstal Event Event Build Extension IDE:
ToolsBuildEventsBuildEventsD5.bpl untuk delphi 5ToolsBuildEventsBuildEventsD6.bpl untuk delphi 6ToolsBuildEventsBuildEventsD7.bpl untuk delphi 7ToolsBuildEventsBuildEventsD2005.bpl untuk Delphi 2005ToolsBuildEventsBuildEventsD2006.bpl untuk Delphi 2006 Dengan acara build ini dan file .bat khusus Anda dapat meniru DEBUG dan RELEASE konfigurasi. Silakan lihat acara Build Events untuk detailnya.
DEBUG yang Disarankan Karena 80 kali sifat kompresi yang lebih lambat dari algoritma Zopfli, tidak masuk akal untuk menggunakannya selama pengembangan dan debug. Jadi untuk semua konfigurasi debug Anda dapat menggunakan kompresi level 1 cepat dan cahaya dengan -GZ1 -B1 Opsi Alat Assetslz :
"..Toolsassetslz" -GZ1 -B1 "$(PROJECTDIR)Assets" "$(PROJECTDIR)Assets.tmp""..Toolsresedit" -D "$(PROJECTDIR)Assets.res" rcdata ASSETS "$(PROJECTDIR)Assets.tmp" RELEASE yang Disarankan Untuk konfigurasi rilis, disarankan untuk menyalakan bpoForceHTTPS , dan mengatur properti .StrictSSL ke strictSSLOn atau bahkan strictSSLIncludeSubDomains . Pengaturan .ContentSecurityPolicy properti dan validasi dengan layanan header keamanan (lihat unit CSP.pas untuk detailnya).
Server http tentang produksi Untuk alasan keamanan Server Anda dapat sepenuhnya menonaktifkan header HTTP dengan X-Powered-By pada produksi. Untuk melakukan ini tambahkan NOXPOWEREDNAME Tentukan ke proyek / opsi / definisi kondisional dan membangun kembali semua.
Jika Anda menggunakan HTTP.sys API pada Windows Server Tambah atau modifikasi tombol registri berikutnya untuk menonaktifkan embedding header http Server (diperlukan hak admin):
Bagian: SYSTEMCurrentControlSetServicesHTTPParameters
KUNCI: DisableServerHeader: DWORD = 2
Sayangnya server http mormot default selalu menggunakan kompresi terdaftar pertama jika beberapa opsi kompresi tersedia. Untuk mengaktifkan dukungan Brotli untuk konten yang dihasilkan (html, json, xml, dll.) Lakukan selanjutnya:
Matikan kompresi lemparan default di unit mORMotHttpServer.pas (baris 76):
Sebelum
{ $define COMPRESSDEFLATE }Setelah
{.$define COMPRESSDEFLATE}
Kemudian daftarkan kompresi server http di Brotli, GZip :
uses
SynZip,
Brotli;
...
HttpServer.RegisterCompress(CompressBrotli);
HttpServer.RegisterCompress(CompressGZip);Anda dapat memberikan aset dan pengalihan yang dapat dihitung sendiri. Ini berguna untuk:
/404.html Kustom. Gunakan BoilerplateHTTPServer.OnGetAsset event handler dan pastikan bahwa sumber daya yang dapat dimodifikasi ditangani dengan dukungan multi-thread. Semua aset eksternal mendukung ETag , strategi cache Last-Modified berdasarkan properti Timestamp yang disediakan dan dapat diunggah secara statis ke penyimpanan (misalnya untuk mendelegasikan penolakan konten ke API http tingkat rendah). Metode yang sama dapat digunakan untuk mengembalikan pengalihan khusus untuk jalur URL tertentu.
TAssets Lanjutan Anda dapat menyematkan direktori atau file apa pun ke dalam file yang dapat dieksekusi proyek tunggal Anda. Ini memberi Anda kemampuan untuk mendistribusikan, skala, dan hanya menjalankan satu file di lingkungan produksi Anda. Muat dari sumber daya dan sebarkan aset apa pun pada produksi Anda saat dimulai. TAssets juga memeriksa file untuk stempel waktu modifikasi dan perubahan ukuran sebelum disimpan untuk mengoptimalkan operasi disk IO.
Misalnya Anda dapat mengompres dan mengemas semua aset statis Anda menjadi 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" Opsi -E untuk tampilan berarti melewatkan kompresi apa pun karena kita tidak perlu memampatkan tampilan kumis. Sekarang Anda dapat menyematkan kedua file sumber daya ke dalam dieksekusi. Tambahkan baris berikutnya ke file proyek Anda di dekat {$R *.res} atau tambahkan kedua file ke proyek:
{ $R Assets.res }
{ $R Views.res }Kemudian pada produksi, Anda dapat mengekstrak tampilan dari yang dapat dieksekusi seperti ini:
procedure SaveViews ;
var
Assets: TAssets;
begin
Assets.Init;
Assets.LoadFromResource( ' Views ' );
Assets.SaveAllIdentities( ' Views ' );
end ; Dengan Metode RegisterCustomOptions Anda dapat mengubah opsi yang berbeda untuk jalur URL HTTP yang berbeda. Misalnya, Anda dapat menonaktifkan penggunaan cache untuk panggilan API JSON atau beberapa halaman khusus seperti ini:
HTTPServer.RegisterCustomOptions(
[ ' /api/json ' , ' /login ' , ' /settings* ' ],
HTTPServer.Options - [bpoSetCachePublic] + [bpoSetCachePrivate,
bpoSetCacheNoCache, bpoSetCacheNoStore, bpoSetCacheMustRevalidate]); TBoilerplateHTTPServer sepenuhnya diuji ditutupi dengan kerangka rangkaian tes mormot . Alih-alih mendekati TDD klasik, skenario pengembangan perilaku (BDD) digunakan. Silakan lihat TestsBoilerplateTests.pas untuk detailnya.
Proyek ini menganut versi semantik. Setiap rilis, bersama dengan instruksi migrasi, didokumentasikan pada halaman Rilis GitHub.
Kode ini tersedia di bawah lisensi MIT.
Jangan ragu untuk menghubungi saya di @gmail.com : eugene.ilyin