Saya sedang membaca utas Peretas Berita di mana satu pengguna memposting tautan dari 2011 yang menjelaskan bahwa IIS jauh lebih cepat daripada kebanyakan server web lainnya (* nix). Pengguna lain menjawab, menjelaskan bahwa IIS mendapatkan keuntungan itu dengan memiliki modul kernel yang disebut HTTP.sys . Sepengetahuan saya, sebagian besar server web populer di 2015 tidak melakukan ini.
Saya tidak akan pernah mau menulis server web mode kernel, karena saya tidak pernah bisa mempercayai diri saya untuk membuatnya bebas dari eksploitasi keamanan (yang akan kurang serius berjalan di cincin perlindungan yang lebih rendah).
Dari sudut pandang insinyur perangkat lunak (berbeda dengan pelanggan untuk server web), apakah menjalankan dalam mode kernel merupakan keputusan kinerja yang cerdas? Bisakah masalah keamanan dikurangi dalam pengembangan aplikasi sampai membuat server mode kernel menjadi laba bersih bagi konsumen?
sumber
Jawaban:
Http.sys bukan server web sebagai proxy-forwarder. Dirancang untuk memungkinkan banyak server web hidup berdampingan pada kotak Windows, sehingga Anda dapat membuat IIS menjalankan situs web, tetapi juga beberapa layanan WCF yang berjalan dengan antarmuka http / REST atau SOAP, semuanya pada port standar 80. (inilah sebabnya Anda tidak dapat menjalankan Apache di Windows tanpa sedikit jiggling, Apache belum dimodifikasi untuk bekerja dengan sistem registrasi ini, sayang itu tidak dibuat lebih transparan untuk aplikasi dan memerlukan beberapa modifikasi yang cukup rumit untuk menghubungkannya).
Cara kerjanya adalah bahwa Anda mendaftarkan URL dengan itu dan aplikasi yang sesuai, dan ketika permintaan http dibuat pada port 80, http.sys menerimanya tetapi kemudian meneruskan permintaan ke aplikasi mana pun yang terdaftar untuk menangani target URL itu.
Saya ragu webserver mode kernel masuk akal - bahkan jika kinerja socket dapat ditingkatkan dengan cara ini, untuk melakukan pekerjaan yang bermanfaat, logika aplikasi masih akan dieksekusi di ruang pengguna, jadi selalu ada transisi - Anda ' Saya baru saja menggesernya di sepanjang callstack sedikit.
sumber
Http.sys bukan satu-satunya server web mode-kernel yang tersedia: di Linux juga ada tux . Seperti yang telah Anda identifikasi dengan benar, keamanan adalah masalah dengan jenis-jenis server ini, yang menyebabkan tux tidak dimasukkan dalam kernel linux mainline (dan saya percaya tidak diperbarui untuk versi kernel yang lebih baru).
Solusi yang lebih baik adalah penggunaan sistem operasi yang tidak bergantung pada perlindungan perangkat keras untuk menegakkan keamanan proses, misalnya singularitas Microsoft: sistem seperti itu akan memungkinkan peningkatan efisiensi server mode kernel tanpa risiko keamanan. Sayangnya, tidak ada sistem operasi siap produksi berdasarkan prinsip ini yang tersedia pada 2015, dan AFAIK juga tidak ada yang bekerja dengan baik (proyek Singularity dibatalkan).
sumber
Http.sys berisiko rendah, karena tidak dapat menjalankan segala penanganan yang diberikan oleh pihak ke-3.
Http.sys melakukan beberapa tugas.
Ini bertindak sebagai proxy-forwarder, sehingga memungkinkan beberapa proses untuk menanggapi permintaan ke berbagai bagian ruang nama HTTP. Jawaban gbjbaanb mencakup ini dengan baik.
Ini melayani file statis, langsung dari cache file windows. Ini memberikan kecepatan yang luar biasa untuk file kecil file statis, karena tidak ada sakelar konteks.
Ini akan menyimpan hasil dari aplikasi apa pun yang meneruskan permintaan HTTP, dan mengembalikan hasil yang diuangkan. Aplikasi ini dalam kontrol penuh atas berapa lama (jika ada) caching berlangsung.
Http.sys dirancang untuk melakukan tugas-tugas sederhana SANGAT cepat, sambil meneruskan segala sesuatu yang lain ke proses di ruang pengguna.
Menanggapi komentar tersebut
Masalahnya adalah Anda harus mempercayai Microsoft untuk menulis kode kernel yang kompleks untuk mengajukan pertanyaan ini, jika tidak Anda memutuskan untuk tidak menggunakan windows untuk hosting web sama sekali . Http.sys menambahkan sangat sedikit pada risiko bug kernel, mengingat betapa rumitnya kernel itu.
Jika ada sesuatu, Http.sys mengurangi risiko, karena ada pemisahan yang jelas di bawah penyajian web "tingkat rendah" dan kode aplikasi.
Dalam pengaturan yang dirancang dengan baik, mesin (atau server virtual) yang menjalankan server web memiliki akses yang sangat terbatas ke seluruh jaringan, karena merupakan target risiko tinggi. Itu membuat sangat sedikit berbeda jika kernel atau server web mode pengguna diretas, karena server tidak boleh memiliki "hak" lagi di jaringan, maka proses mode pengguna server web perlu melakukan tugasnya.
sumber