HTTP 처리기 대 HTTP 모듈


144

누군가 2 문장 미만으로 두 문장의 차이점을 설명 할 수 있습니까? 예, Google은 수백 개의 답변을 제공 할 수 있지만 두 가지 명확한 문장 중 하나는 제공 할 수 없음을 알고 있습니다 :)


모든 요청 전에 일부 코드를 실행하려고합니다.
frenchie

23
"예, Google에서 할 수 있다는 것을 알고 있습니다."+1
Csharp

7
"두 문장 미만." 한 문장처럼?
Andrew Theken

답변:


316

HttpHandler는 요청 기차가 향하는 곳입니다. HttpModule은 그 길을 따라있는 스테이션입니다.


멋진 설명! :)
SO User

3
이것이 좋은 답변이지만 동의 한 답변으로 표시 할 수 없다는 데 동의합니다.
Shrivallabh 2016 년

단순히 화려한 !! :)
Dee

4
기술적으로 "두 문장 이상"이 아닙니다. <trollface>
Andrew Theken

5
좋은. 나는 HttpContext가 기차라고 덧붙인다. 모든 스테이션 (모듈)은 지나가는 방식으로 HttpContext에 기여합니다.
Duanne

203

두 문장 :

HttpModule은 확장에 관계없이 애플리케이션에 대한 모든 요청에 ​​대해 실행되며 일반적으로 보안, 통계, 로깅 등과 같은 것들에 사용됩니다.

HttpHandler는 일반적으로 특정 확장과 관련이 있으며 RSS 피드, 동적 이미지 생성 또는 수정 등과 같은 것들에 사용됩니다.

완전히 명확하지 않은 경우 조금 더 설명 :

내가 생각하는 방식-모듈은 요청 파이프 라인에 "플러그인"하는 반면, 핸들러는 특정 파일 확장자를 "핸들링"합니다. 따라서 LoggingModule 및 PdfHandler가있는 사이트가있는 경우 둘 다 http://example.com/sample.pdf 에 대한 요청에 대해 실행 되며 로깅 모듈 만 http : // 에 대한 요청에 대해 실행됩니다 . example.com/page.aspx .

MSDN의 차이점에 대한 명확한 기사가 있습니다. HTTP 처리기 및 HTTP 모듈 개요


1
좋아, 그래서 모든 요청에서 .aspx 파일로 실행되는 일부 코드를 실행하려면 처리기를 구현하고 요청 된 파일 유형에 관계없이 모든 요청에서 일부 코드를 실행하려면 모듈을 구현합니다. 그게 다야?
frenchie

5
@frenchie-아니요. aspx 페이지는 페이지 수명주기를 제공하여 HttpHandlers 위에 작성됩니다. aspx 페이지로 생각하고 매우 기본적인 이벤트로 줄이십시오. ProcessRequest. 반면에 모듈은 연결된 라이프 사이클의 어느 시점에서나 실행됩니다. aspx 페이지 이전에 무언가를 실행하려는 시나리오의 경우 모듈이 필요합니다. 그러나 .aspx가 아닌 페이지에 대한 요청을 수동으로 필터링해야합니다.
Phill

6
모든 요청에 ​​단 하나의 처리기와 여러 모듈이있을 수 있다고 말하면 맞습니까?
Maarten Kieft

1
handlers = state의 일반적인 대답입니까? 모듈은 기록되지 않은 표준이 아니거나 두 가지와 근본적으로 다른 것이 있습니까? 내가 말하면 사람이 모듈을 처리기와 같게 또는 그 반대로 코딩 할 수 있습니까? 불가능하게 만드는 사람들?
Rich Bianco

21

HttpHandler 및 HttpModule의 주요 목표는 ASP.NET 요청이 IIS 서버에 도달하기 전에 사전 처리 논리를 삽입하는 것입니다.

ASP.NET은 요청 파이프 라인에 로직을 주입하는 두 가지 방법을 제공합니다.

  1. Http Handlers : Http Handler는 요청 된 파일 이름의 확장자를 기반으로 사전 처리 논리를 주입하는 데 도움이됩니다. ASP.NET은 자체 기능을 구현하기 위해 HTTP 처리기를 사용합니다. 예를 들어 ASP.NET은 .aspx, .asmx 및 trace.axd 파일 처리에 처리기를 사용합니다.

예 : RSS 피드 : 웹 사이트에 대한 RSS 피드를 만들려면 RSS 형식의 XML을 내보내는 처리기를 만들 수 있습니다. 따라서 사용자가 .rss로 끝나는 요청을 사이트에 보내면 ASP.NET은 처리기를 호출하여 요청을 처리합니다.

핸들러 1을 작성하는 데는 세 가지 단계가 있습니다. IHttpHandler 인터페이스를 구현하십시오. 2. web.config 또는 machine.config 파일에 핸들러를 등록하십시오. 3. 파일 확장자 (* .arshad)를 IIS의 aspnet_isapi.dll에 매핑합니다.

IHttpHandler 인터페이스에는 구현해야하는 ProcessRequest 메소드 및 IsReusable 특성이 있습니다. ProcessRequest :이 메소드에서는 핸들러의 출력을 생성하는 코드를 작성합니다. IsResuable :이 속성은이 핸들러를 재사용 할 수 있는지 여부를 알려줍니다.

다음과 같이 web.config 파일에 핸들러를 등록 할 수 있습니다

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

참고 : 여기서는 확장자가 arshad 인 모든 파일 이름을 처리합니다.

  1. Http 모듈 : HttpModule은 요청이 IIS 서버에 도달하기 전에 사전 처리 논리를 주입하는 이벤트 기반 프로세서입니다. ASP.NET은 HTTP 모듈을 사용하여 인증 및 권한 부여, 세션 관리 및 출력 캐싱 등과 같은 자체 기능을 많이 구현합니다.

요청이 요청 파이프 라인을 통과 할 때 ASP.NET 엔진은 많은 이벤트를 생성합니다. 이러한 이벤트 중 일부는 AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest입니다. HttpModule을 사용하면 이러한 이벤트에서 논리를 작성할 수 있습니다. 이러한 논리는 이벤트가 발생하고 요청이 IIS에 도달하기 전에 실행됩니다.

모듈 생성에는 두 단계가 있습니다. 1. IHttpModule 인터페이스 구현 2. web.config 또는 machine.config 파일에 모듈 등록

예 : 보안 : HTTP 모듈을 사용하면 요청이 IIS에 도달하기 전에 사용자 지정 인증 또는 기타 보안 검사를 수행 할 수 있습니다.


19

HTTP 처리기는 ASP.NET 웹 응용 프로그램에 대한 요청에 응답하여 실행되는 프로세스입니다. HTTP 모듈을 사용하면 들어오고 나가는 요청을 검사하고 요청에 따라 조치를 취할 수 있습니다.


1
그런 의미에서 aspx는 httphandler의 유형으로 간주 될 수 있습니까?
frenchie

17
예 Frenchie .. 모든 aspx의 코드를 엽니 다. public partial class good : System.Web.UI.Page 이제 Page를 마우스 오른쪽 단추로 클릭하고 정의로 이동을 클릭하십시오. public class Page : TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler는 HttpModule이 응용 프로그램 수명주기 이벤트에 응답하는 동안 확장별로 HTTP 요청을 처리합니다.


2

HttpModule-and-HttpHandlers에 대한 좋은 기사

참조 : 정보 : ASP.NET HTTP 모듈 및 HTTP 처리기 개요

“핸들러는 핸들러 실행 전후에 호출됩니다. 모듈을 통해 개발자는 각 개별 요청을 가로 채거나 참여하거나 수정할 수 있습니다. 핸들러는 개별 엔드 포인트 요청을 처리하는 데 사용됩니다. 처리기는 ASP.NET Framework가 응용 프로그램 내에서 개별 HTTP URL 또는 URL 확장 그룹을 처리 할 수 ​​있도록합니다. 모듈과 달리 요청을 처리하는 데 하나의 핸들러 만 사용됩니다”.


감사합니다, 그것은 저에게 많은 도움이됩니다
Rahul Chowdhury

1

HTTP 처리기는 설정에 따라 실제로 컴파일이 수행되는 곳입니다. 페이지 확장자가 .aspx 인 경우 system.web.Ui.Pagahandlefactory를 통해 컴파일됩니다. HTTP 핸들에서 컴파일이 완료되면 HTTP 모듈과 IIS를 통해 요청이 진행됩니다.


0

HTTP 처리기

HTTP 처리기는 HTTP 요청에 응답하여 실행되는 프로세스입니다. 따라서 사용자가 파일을 요청할 때마다 확장명에 따라 처리기가 처리합니다. 따라서 파일 이름 확장자를 기반으로 특수 처리해야 할 경우 사용자 정의 http 핸들러가 작성됩니다. 사이트에 대한 RSS를 작성하는 예를 고려해 봅시다. 따라서 RSS 형식의 XML을 생성하는 핸들러를 작성하십시오. 이제 .rss 확장자를 사용자 정의 핸들러에 바인드하십시오.

HTTP 모듈

HTTP 모듈은 요청 수명주기에 연결됩니다. 따라서 요청이 처리되면 요청 파이프 라인의 모든 모듈을 통과합니다. 따라서 일반적으로 http 모듈은 다음 용도로 사용됩니다.

보안 : 요청이 처리되기 전에 요청을 인증합니다.

통계 및 로깅 : 모든 요청에 ​​대해 모듈이 호출되므로 통계 수집 및 정보 로깅에 사용할 수 있습니다.

사용자 정의 헤더 : 응답을 수정할 수 있으므로 사용자 정의 헤더 정보를 응답에 추가 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.