Penangan HTTP vs modul HTTP


144

Bisakah seseorang menjelaskan dalam kurang dari 2 kalimat perbedaan antara keduanya? Ya, saya tahu Google dapat memberikan ratusan jawaban tetapi tidak satu dari 2 kalimat yang jelas :)


Dalam konteks mencari menjalankan beberapa kode sebelum setiap permintaan.
frenchie

23
+1 untuk "ya saya tahu saya bisa Google itu".
Csharp

7
"Kurang dari dua kalimat." Seperti, satu kalimat?
Andrew Theken

Jawaban:


316

HttpHandler adalah tempat kereta permintaan menuju. HttpModule adalah stasiun di sepanjang jalan.


Penjelasan luar biasa! :)
SO Pengguna

3
Saya setuju ini adalah jawaban yang baik namun tidak dapat ditandai sebagai jawaban yang diterima.
Shrivallabh

Cukup brilian !! :)
Dee

4
Secara teknis, tidak "kurang dari dua kalimat." <trollface>
Andrew Theken

5
Bagus. Saya ingin menambahkan bahwa HttpContext adalah kereta. Setiap stasiun (Modul) berkontribusi pada HttpContext dalam beberapa cara ketika lewat.
Duanne

203

Dua kalimat:

HttpModule akan mengeksekusi untuk setiap permintaan ke aplikasi Anda, terlepas dari ekstensi, dan umumnya digunakan untuk hal-hal seperti keamanan, statistik, pencatatan, dll.

HttpHandler umumnya dikaitkan dengan ekstensi tertentu, dan digunakan untuk hal-hal seperti umpan RSS, pembuatan atau modifikasi gambar dinamis, dan sejenisnya.

Penjelasan lebih sedikit jika itu tidak sepenuhnya jelas:

Cara saya berpikir tentang mereka - modul "pasang" ke pipa permintaan, sedangkan penangan "menangani" ekstensi file tertentu. Jadi, jika Anda memiliki situs dengan LoggingModule dan PdfHandler, keduanya akan mengeksekusi untuk permintaan ke http://example.com/sample.pdf , dan modul logging saja akan mengeksekusi untuk permintaan ke http: // example.com/page.aspx .

Ada artikel yang cukup jelas tentang perbedaan pada MSDN: Penangan HTTP dan Ikhtisar Modul HTTP


1
ok, jadi jika saya ingin menjalankan beberapa kode yang berjalan pada setiap permintaan ke file .aspx saya mengimplementasikan handler dan jika saya ingin menjalankan beberapa kode pada setiap permintaan terlepas dari jenis file yang diminta, saya mengimplementasikan modul. Itu saja?
frenchie

5
@frenchie - Tidak, halaman aspx dibuat di atas HttpHandlers dengan memberi Anda Siklus Hidup Halaman. Anggap saja sebagai halaman aspx, kurangi ke acara yang sangat mendasar. ProcessRequest. Modul di sisi lain, akan mengeksekusi pada setiap titik dalam siklus hidup yang Anda hubungkan. Untuk skenario Anda ingin menjalankan sesuatu sebelum halaman aspx, Anda menginginkan sebuah modul. Namun Anda perlu secara manual menyaring permintaan ke halaman yang tidak .aspx
Phill

6
Apakah saya benar dengan mengatakan bahwa setiap permintaan hanya dapat memiliki 1 handler dan beberapa modul?
Maarten Kieft

1
Apakah jawaban umum dari penangan = keadaan, dan modul bukan standar yang tidak tertulis atau apakah ada sesuatu yang secara fundamental berbeda dari keduanya, maksud saya, dapatkah seseorang membuat kode modul menjadi seperti penangan dan sebaliknya atau apakah ada batasan untuk mereka yang membuatnya mustahil?
Rich Bianco

21

Tujuan utama dan umum dari HttpHandler dan HttpModule adalah untuk menyuntikkan logika pra-pemrosesan sebelum permintaan ASP.NET mencapai Server IIS.

ASP.NET menyediakan dua cara menyuntikkan logika dalam pipa permintaan;

  1. Http Handler: Http Handler membantu kami untuk menyuntikkan logika pra-pemrosesan berdasarkan ekstensi nama file yang diminta. ASP.NET menggunakan penangan HTTP untuk mengimplementasikan banyak fungsinya sendiri. Misalnya, ASP.NET menggunakan penangan untuk memproses file .aspx, .asmx dan trace.axd.

contoh: Umpan RSS: Untuk membuat umpan RSS untuk situs Web, Anda dapat membuat penangan yang memancarkan XML berformat RSS. Jadi ketika pengguna mengirim permintaan ke situs Anda yang berakhiran .rss, ASP.NET memanggil penangan Anda untuk memproses permintaan tersebut.

Ada tiga langkah yang terlibat dalam membuat Handler 1. Menerapkan antarmuka IHttpHandler. 2. Daftarkan handler di file web.config atau machine.config. 3. Petakan ekstensi file (* .arshad) ke aspnet_isapi.dll di IIS.

Antarmuka IHttpHandler memiliki metode ProcessRequest dan properti IsReusable yang perlu diimplementasikan. ProcessRequest: Dalam metode ini, Anda menulis kode yang menghasilkan output untuk handler. IsResuable: Properti ini memberi tahu apakah handler ini dapat digunakan kembali atau tidak.

Anda dapat mendaftarkan pawang di file web.config seperti ini

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

Catatan: di sini kami menangani nama file apa pun dengan ekstensi arshad.

  1. Modul Http: HttpModule adalah prosesor berbasis peristiwa untuk menyuntikkan logika pra-pemrosesan sebelum permintaan mencapai IIS Server. ASP.NET menggunakan Modul HTTP untuk mengimplementasikan banyak fungsinya sendiri seperti otentikasi dan otorisasi, manajemen sesi dan caching keluaran dll.

Mesin ASP.NET memancarkan banyak acara saat permintaan melewati pipa permintaan. Beberapa dari peristiwa tersebut adalah AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Dengan Menggunakan HttpModule Anda dapat menulis logika di acara ini. Logika ini bisa dieksekusi saat event dijalankan dan sebelum permintaan mencapai IIS.

Ada dua langkah yang terlibat dalam membuat Modul, 1. Menerapkan antarmuka IHttpModule 2. Mendaftar modul di file web.config atau machine.config

contoh: Keamanan: Menggunakan modul HTTP, Anda dapat melakukan otentikasi khusus atau pemeriksaan keamanan lainnya sebelum permintaan mencapai IIS.


19

Handler HTTP adalah proses yang berjalan sebagai respons terhadap permintaan yang dibuat untuk aplikasi Web ASP.NET. Modul HTTP memungkinkan Anda memeriksa permintaan masuk dan keluar dan mengambil tindakan berdasarkan permintaan.


1
Dalam pengertian itu, sebuah aspx dapat dianggap sebagai jenis httphandler?
frenchie

17
Ya Frenchie..Buka kode di belakang aspx apa pun. Anda akan melihat: public partial class good: System.Web.UI.Page Sekarang klik kanan pada Page dan klik Go to definition, Anda akan melihat: public class Halaman: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler bertanggung jawab untuk menangani permintaan http dengan ekstensi sementara HttpModule merespons peristiwa siklus hidup aplikasi.


2

Artikel bagus tentang hal itu HttpModule-and-HttpHandlers

Referensi: INFO: Modul HTTP ASP.NET dan Tinjauan HTTP Handler

“Modul dipanggil sebelum dan sesudah pawang dieksekusi. Modul memungkinkan pengembang untuk mencegat, berpartisipasi dalam, atau memodifikasi setiap permintaan individu. Handler digunakan untuk memproses permintaan titik akhir individual. Handler mengaktifkan ASP.NET Framework untuk memproses URL HTTP individu atau grup ekstensi URL dalam suatu aplikasi. Tidak seperti modul, hanya satu penangan yang digunakan untuk memproses permintaan ”.


Terima kasih, Ini banyak membantu saya
Rahul Chowdhury

1

Handler HTTP adalah tempat sebenarnya kompilasi dilakukan berdasarkan pengaturan. seperti jika ekstensi halaman .aspx maka itu akan dikompilasi melalui system.web.Ui.Pagahandlefactory. setelah kompilasi dilakukan pada permintaan menangani HTTP akan pergi melalui modul HTTP dan IIS.


0

Penangan HTTP

HTTP Handler adalah proses yang berjalan sebagai respons terhadap permintaan HTTP. Jadi setiap kali pengguna meminta file itu diproses oleh penangan berdasarkan ekstensi. Jadi, penangan http khusus dibuat ketika Anda perlu penanganan khusus berdasarkan ekstensi nama file. Mari kita pertimbangkan contoh untuk membuat RSS untuk sebuah situs. Jadi, buat handler yang menghasilkan XML berformat RSS. Sekarang ikat ekstensi .rss ke custom handler.

Modul HTTP

Modul HTTP dicolokkan ke siklus hidup permintaan. Jadi, ketika permintaan diproses, itu akan melewati semua modul dalam pipa permintaan. Jadi umumnya modul http digunakan untuk:

Keamanan: Untuk mengotentikasi permintaan sebelum permintaan ditangani.

Statistik dan Logging: Karena modul dipanggil untuk setiap permintaan, mereka dapat digunakan untuk mengumpulkan statistik dan untuk mencatat informasi.

Header khusus: Karena respons dapat dimodifikasi, seseorang dapat menambahkan informasi header khusus ke respons.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.