Trình xử lý HTTP và mô đun HTTP


144

Ai đó có thể giải thích trong ít hơn 2 câu sự khác biệt giữa cả hai? Vâng, tôi biết google có thể cung cấp hàng trăm câu trả lời nhưng không phải là một trong 2 câu rõ ràng :)


Trong bối cảnh tìm kiếm để chạy một số mã trước mỗi yêu cầu.
Frenchie

23
+1 cho "vâng tôi biết tôi có thể Google nó".
Csharp

7
"Ít hơn hai câu." Giống như, một câu?
Andrew Theken

Câu trả lời:


316

HttpHandler là nơi đào tạo yêu cầu. HttpModule là một trạm trên đường đi.


Giải thích tuyệt vời! :)
Người dùng SO

3
Tôi đồng ý rằng đây là một câu trả lời tốt tuy nhiên không thể được đánh dấu là câu trả lời được chấp nhận.
Shrivallabh

Đơn giản rực rỡ!! :)
Dee

4
Về mặt kỹ thuật, không "ít hơn hai câu." <trollface>
Andrew Theken

5
Đẹp. Tôi sẽ thêm rằng HTTPContext là tàu. Mỗi trạm (Mô-đun) đóng góp cho HttpContext theo một cách nào đó khi nó đi qua.
Duanne

203

Hai câu:

Một HTTPModule sẽ thực thi cho mọi yêu cầu đến ứng dụng của bạn, bất kể tiện ích mở rộng và thường được sử dụng cho những thứ như bảo mật, thống kê, ghi nhật ký, v.v.

Một httpHandler thường được liên kết với một tiện ích mở rộng cụ thể và được sử dụng cho những thứ như nguồn cấp RSS, tạo hoặc sửa đổi hình ảnh động và tương tự.

Giải thích thêm một chút nếu điều đó không hoàn toàn rõ ràng:

Cách tôi nghĩ về chúng - các mô-đun "cắm" vào đường ống yêu cầu, trong khi các trình xử lý "xử lý" một phần mở rộng tệp cụ thể. Vì vậy, nếu bạn đã có một trang web với LoggingModule và PdfHandler, cả hai sẽ thực thi một yêu cầu tới http://example.com/sample.pdf và mô-đun đăng nhập sẽ thực hiện một yêu cầu tới http: // example.com/page.aspx .

Có một bài viết khá rõ ràng về sự khác biệt trên MSDN: Tổng quan về Trình xử lý HTTP và Mô-đun HTTP


1
ok, vì vậy nếu tôi muốn chạy một số mã chạy trên mọi yêu cầu đối với tệp .aspx tôi thực hiện một trình xử lý và nếu tôi muốn chạy một số mã theo mọi yêu cầu bất kể loại tệp được yêu cầu tôi thực hiện mô-đun. Là nó?
Frenchie

5
@fblerie - Không, các trang aspx được xây dựng trên đầu trang httpHandlers bằng cách cung cấp cho bạn Vòng đời Trang. Hãy nghĩ về nó như một trang aspx, cắt giảm đến sự kiện rất cơ bản. ProcessRequest. Mặt khác, mô-đun sẽ thực thi tại bất kỳ điểm nào trong vòng đời mà bạn kết nối nó. Đối với kịch bản của bạn muốn chạy một cái gì đó trước trang aspx, bạn muốn có một mô-đun. Tuy nhiên, bạn cần lọc thủ công các yêu cầu đến các trang không phải là .aspx
Phill

6
Tôi có đúng không khi nói rằng mọi yêu cầu có thể chỉ có 1 trình xử lý và nhiều mô-đun?
Maarten Kieft

1
Là câu trả lời chung của handlers = state và các mô-đun không phải là một tiêu chuẩn bất thành văn hay có gì khác về cơ bản so với hai người, ý tôi là, một người có thể mã hóa một mô-đun giống như một trình xử lý và ngược lại hoặc có những hạn chế đối với chúng làm cho nó không thể?
Rich Bianco

21

Mục tiêu chính và phổ biến của HttpHandler và HttpModule là tiêm logic tiền xử lý trước khi yêu cầu ASP.NET đến Máy chủ IIS.

ASP.NET cung cấp hai cách tiêm logic trong đường ống yêu cầu;

  1. Trình xử lý http: Trình xử lý http giúp chúng tôi đưa ra logic xử lý trước dựa trên phần mở rộng của tên tệp được yêu cầu. ASP.NET sử dụng trình xử lý HTTP để thực hiện rất nhiều chức năng của chính nó. Ví dụ, ASP.NET sử dụng trình xử lý để xử lý các tệp .aspx, .asmx và track.axd.

ví dụ: Nguồn cấp RSS: Để tạo nguồn cấp RSS cho trang Web, bạn có thể tạo trình xử lý phát ra XML có định dạng RSS. Vì vậy, khi người dùng gửi yêu cầu đến trang web của bạn kết thúc bằng .rss, ASP.NET gọi trình xử lý của bạn để xử lý yêu cầu.

Có ba bước liên quan đến việc tạo Handler 1. Thực hiện giao diện IHttpHandler. 2. Đăng ký trình xử lý trong tệp web.config hoặc machine.config. 3. Ánh xạ phần mở rộng tệp (* .arshad) sang aspnet_isapi.dll trong IIS.

Giao diện IHttpHandler có phương thức ProcessRequest và thuộc tính IsReables cần được triển khai. ProcessRequest: Trong phương thức này, bạn viết mã tạo ra đầu ra cho trình xử lý. IsResuable: Thuộc tính này cho biết trình xử lý này có thể được sử dụng lại hay không.

Bạn có thể đăng ký trình xử lý trong tệp web.config như thế này

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

Lưu ý: ở đây chúng tôi đang xử lý bất kỳ tên tệp nào với phần mở rộng arshad.

  1. Các mô-đun http: HttpModule là một bộ xử lý dựa trên sự kiện để đưa logic tiền xử lý trước khi yêu cầu đến Máy chủ IIS. ASP.NET sử dụng Mô-đun HTTP để triển khai nhiều chức năng của chính nó như xác thực và ủy quyền, quản lý phiên và bộ đệm ẩn đầu ra, v.v.

Công cụ ASP.NET phát ra rất nhiều sự kiện khi yêu cầu chuyển qua đường ống yêu cầu. Một số trong những sự kiện đó là AuthenticicateRequest, AuthorizeRequest, BeginRequest, EndRequest. Bằng cách sử dụng HttpModule, bạn có thể viết logic trong các sự kiện này. Các logic này được thực thi khi các sự kiện bắt đầu và trước khi yêu cầu đến IIS.

Có hai bước liên quan đến việc tạo Mô-đun, 1. Thực hiện giao diện IHttpModule 2. Đăng ký mô-đun trong tệp web.config hoặc machine.config

ví dụ: Bảo mật: Sử dụng mô-đun HTTP, bạn có thể thực hiện xác thực tùy chỉnh hoặc kiểm tra bảo mật khác trước khi yêu cầu đến IIS.


19

Trình xử lý HTTP là quá trình chạy để đáp ứng yêu cầu đối với ứng dụng Web ASP.NET. Các mô-đun HTTP cho phép bạn kiểm tra các yêu cầu đến và đi và thực hiện hành động dựa trên yêu cầu.


1
Theo nghĩa đó, một aspx có thể được coi là một loại của Olephandler?
Frenchie

17
Có Frenchie..Mở mã phía sau của bất kỳ aspx. bạn sẽ thấy: lớp một phần tốt: System.Web.UI.Page Bây giờ, nhấp chuột phải vào Trang và nhấp vào định nghĩa, bạn sẽ thấy: lớp công khai Trang: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler chịu trách nhiệm xử lý yêu cầu http bằng tiện ích mở rộng trong khi HttpModule đang phản hồi các sự kiện trong vòng đời của ứng dụng.


2

Bài viết hay về nó httpModule-and-HttpHandlers

Tham khảo: INFO: Mô-đun HTTP HTTP và Trình xử lý HTTP Tổng quan

Các mô-đun được gọi trước và sau khi xử lý thực thi. Các mô-đun cho phép các nhà phát triển chặn, tham gia hoặc sửa đổi từng yêu cầu riêng lẻ. Xử lý được sử dụng để xử lý các yêu cầu điểm cuối cá nhân. Trình xử lý cho phép ASP.NET Framework xử lý các URL HTTP riêng lẻ hoặc các nhóm tiện ích mở rộng URL trong một ứng dụng. Không giống như các mô-đun, chỉ có một trình xử lý được sử dụng để xử lý yêu cầu.


Cảm ơn bạn, nó giúp tôi rất nhiều
Rahul Chowdhury

1

Trình xử lý HTTP là nơi thực sự biên dịch được thực hiện dựa trên cài đặt. chẳng hạn như nếu phần mở rộng trang là .aspx thì nó sẽ biên dịch thông qua system.web.Ui.Pagahandlefactory. một khi quá trình biên dịch được thực hiện tại yêu cầu xử lý HTTP sẽ đi qua mô-đun HTTP và IIS.


0

Trình xử lý HTTP

HTTP Handler là quá trình chạy để đáp ứng yêu cầu HTTP. Vì vậy, bất cứ khi nào người dùng yêu cầu một tệp, nó được xử lý bởi trình xử lý dựa trên phần mở rộng. Vì vậy, trình xử lý http tùy chỉnh được tạo khi bạn cần xử lý đặc biệt dựa trên phần mở rộng tên tệp. Hãy xem xét một ví dụ để tạo RSS cho một trang web. Vì vậy, hãy tạo một trình xử lý tạo XML có định dạng RSS. Bây giờ liên kết phần mở rộng .rss với trình xử lý tùy chỉnh.

Mô-đun HTTP

Các mô-đun HTTP được cắm vào vòng đời của một yêu cầu. Vì vậy, khi một yêu cầu được xử lý, nó được chuyển qua tất cả các mô-đun trong đường ống của yêu cầu. Vì vậy, nói chung các mô-đun http được sử dụng cho:

Bảo mật: Để xác thực một yêu cầu trước khi yêu cầu được xử lý.

Thống kê và ghi nhật ký: Vì các mô-đun được gọi cho mọi yêu cầu, chúng có thể được sử dụng để thu thập số liệu thống kê và ghi thông tin.

Tiêu đề tùy chỉnh: Vì phản hồi có thể được sửa đổi, người ta có thể thêm thông tin tiêu đề tùy chỉnh vào phản hồi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.