2011-06-23 27 views
115

Ai đó có thể giải thích trong ít hơn 2 câu về sự khác biệt giữa hai câu? 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 :)Trình xử lý HTTP và mô-đun HTTP

+0

Trong ngữ cảnh nào? – Flimzy

+0

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

+18

+1 cho "yeah tôi biết tôi có thể Google nó". – Csharp

Trả lời

254

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

+4

Đây phải là câu trả lời được chấp nhận. –

+39

Great inline explnantion..you là shakespeare lập trình. !!! – Pranav

+0

Giải thích tuyệt vời! :) –

181

Hai câu:

Một HttpModule sẽ thực hiện cho mọi yêu cầu để ứng dụng của bạn, bất kể phần 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.

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 dữ liệu RSS, tạo hoặc sửa đổi hình ảnh động và tương tự.

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

Con đường tôi nghĩ về họ - module "cắm" vào đường ống theo yêu cầu, trong khi xử lý "xử lý" một phần mở rộng tập tin cụ thể. Vì vậy, nếu bạn có một trang web có LoggingModule và PdfHandler, cả hai sẽ thực hiện yêu cầu đến http://example.com/sample.pdf và chỉ mô-đun ghi nhật ký sẽ thực thi yêu cầu cho 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: HTTP Handlers and HTTP Modules Overview

+0

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 đến tệp .aspx, tôi triển khai trình xử lý và nếu tôi muốn chạy một số mã trên mọi yêu cầu bất kể loại tệp được yêu cầu, tôi triển khai mô-đun. Là nó? – frenchie

+4

@frenchie - Không, các trang aspx được xây dựng trên 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 sự kiện rất cơ bản. 'ProcessRequest'. Các mô-đun mặt khác, sẽ thực hiện tại bất kỳ điểm nào trong vòng đời bạn dây nó lên đến. Đối với kịch bản của bạn muốn chạy một cái gì đó trước khi 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 đối với các trang không phải là .aspx – Phill

+5

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

15

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

+1

Trong ý nghĩa đó, một aspx có thể được coi là một loại httphandler? – frenchie

+14

Có Frenchie..Mở mã đằng sau bất kỳ aspx nào. bạn sẽ thấy: lớp học công cộng 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 Đi đến định nghĩa, bạn sẽ thấy: lớp công khai Trang: TemplateControl, IHttpHandler –

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 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.

2

Nice bài viết aboute nó HttpModule-and-HttpHandlers

tham khảo: INFO: ASP.NET HTTP module và HTTP Handlers Tổng quan

“Modules được gọi là trước và sau khi xử lý được thực thi. Các mô-đun cho phép nhà phát triển chặn, tham gia hoặc sửa đổi từng yêu cầu riêng lẻ. Trình xử lý được sử dụng để xử lý các yêu cầu điểm cuối riêng lẻ. 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ý một yêu cầu ”.

+0

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

1

HttpHandler chịu trách nhiệm xử lý yêu cầu http trong khi HttpModule phản hồi các sự kiện vòng đời ứng dụng.

13

Mục tiêu chính và chung của HttpHandler và HttpModule là tiêm logic xử lý trước khi yêu cầu ASP.NET đạt đến IIS Server.

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

  1. Http Trình xử lý: Http Trình xử lý giúp chúng tôi chèn logic xử lý 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 các trình xử lý HTTP để thực hiện rất nhiều chức năng riêng của mình.Ví dụ, ASP.NET sử dụng các trình xử lý để xử lý các tệp .aspx, .asmx và trace.axd.

ví dụ: Nguồn cấp dữ liệu RSS: Để tạo nguồn cấp dữ liệu RSS cho trang Web, bạn có thể tạo trình xử lý phát ra XML đị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. Triển khai 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 tin (* .arshad) lên aspnet_isapi.dll trong IIS.

Giao diện IHttpHandler có phương thức ProcessRequest và thuộc tính IsReusable cần được triển khai. ProcessRequest: Trong phương thức này, bạn viết mã tạo đầ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ý xử lý trong file 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 tin với phần mở rộng Arshad.

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

Công cụ ASP.NET phát ra nhiều sự kiện như yêu cầu thông qua đường ống yêu cầu. Một số sự kiện đó là AuthenticateRequest, 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 hiện khi các sự kiện cháy và trước khi yêu cầu đến IIS.

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

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

Các vấn đề liên quan