IHttpHandler 대 IHttpModule


81

내 질문은 간단합니다 (대답은 아닐 수 있지만) : C # / ASP.NET에서 서버 측 업로드 처리기를 구현하는 방법을 결정하려고합니다.

HttpModules (IHttpModule 인터페이스)와 HttpHandlers (IHttpHandler 인터페이스)를 모두 사용했으며 두 메커니즘 중 하나를 사용하여이를 구현할 수 있다는 것을 알게되었습니다. 둘의 차이점을 이해하지 못하는 것도 나에게 발생합니다.

그래서 내 질문은 이것입니다 : 어떤 경우에 IHttpModule 대신 IHttpHandler를 사용하기로 선택합니까 (그 반대도 마찬가지입니까?)?

파이프 라인에서 훨씬 더 높은 곳에서 실행됩니까? 특정 상황에서 훨씬 쉽게 구성 할 수 있습니까? 중간 보안으로 잘 작동하지 않습니까?


3
'두 사람의 차이점을 이해하지 못하는 것도 나에게 일어난다.'에서 진지하게 LOL'ed. 좋은 질문은하지만 해당 :)에 대한 +1을받을 자격이 것
JohnIdol

2
:-) 감사. 내가 모르는 것들에 대해 솔직 해지는 것이 좋다고 생각합니다.
Dan Esparza 2011 년

1
질문하지 않고, 거기에 아무 대답 것 ... :)
Sprintstar

답변:


70

ASP.NET HTTP 처리기 는 ASP.NET 웹 응용 프로그램에 대한 요청에 대한 응답으로 실행되는 프로세스 ( "종점"이라고도 함)입니다. 가장 일반적인 처리기는 .aspx 파일을 처리하는 ASP.NET 페이지 처리기입니다. 사용자가 .aspx 파일을 요청하면 페이지 처리기를 통해 페이지에서 요청이 처리됩니다. 사용자 지정 출력을 브라우저에 렌더링하는 고유 한 HTTP 처리기를 만들 수 있습니다.

사용자 지정 HTTP 처리기의 일반적인 용도는 다음과 같습니다.

  • RSS 피드 웹 사이트에 대한 RSS 피드를 만들려면 RSS 형식의 XML을 내보내는 처리기를 만들 수 있습니다. 그런 다음 .rss와 같은 파일 이름 확장명을 사용자 지정 처리기에 바인딩 할 수 있습니다. 사용자가 사이트에 .rss로 끝나는 요청을 보내면 ASP.NET은 처리기를 호출하여 요청을 처리합니다.
  • 이미지 서버 웹 응용 프로그램이 다양한 크기의 이미지를 제공하도록하려면 사용자 지정 처리기를 작성하여 이미지 크기를 조정 한 다음 처리기의 응답으로 사용자에게 보낼 수 있습니다.

HTTP 모듈은 응용 프로그램에 만든 모든 요청에서 호출되는 어셈블리입니다. HTTP 모듈은 ASP.NET 요청 파이프 라인의 일부로 호출되며 요청 전체에서 수명주기 이벤트에 액세스 할 수 있습니다. HTTP 모듈을 사용하면 수신 및 발신 요청을 검사하고 요청에 따라 조치를 취할 수 있습니다.

HTTP 모듈의 일반적인 용도는 다음과 같습니다.

  • 보안 들어오는 요청을 검사 할 수 있기 때문에 HTTP 모듈은 요청 된 페이지, XML 웹 서비스 또는 처리기가 호출되기 전에 사용자 지정 인증 또는 기타 보안 검사를 수행 할 수 있습니다. 통합 모드로 실행되는 IIS (인터넷 정보 서비스) 7.0에서는 응용 프로그램의 모든 콘텐츠 형식으로 폼 인증을 확장 할 수 있습니다.
  • 통계 및 로깅 HTTP 모듈은 모든 요청에 ​​대해 호출되기 때문에 개별 페이지가 아닌 중앙 집중식 모듈에서 요청 통계 및 로그 정보를 수집 할 수 있습니다.
  • 사용자 지정 머리글 또는 바닥 글 보내는 응답을 수정할 수 있으므로 사용자 지정 머리글 정보와 같은 콘텐츠를 모든 페이지 또는 XML 웹 서비스 응답에 삽입 할 수 있습니다.

출처 : http://msdn.microsoft.com/en-us/library/bb398986.aspx


16

여기 에 설명 된대로 HttpModules는 요청 처리 파이프 라인에 연결할 수있는 간단한 클래스 인 반면 HttpHandlers는 요청 처리 파이프 라인에서의 위치뿐만 아니라 특정 파일 확장자에 매핑되어야하기 때문에 HttpModules와 다릅니다.


HttpModule에서 iHttpHandler를 구현하는 클래스로 명시 적으로 해결하는 경우 핸들러를 확장에 매핑 할 필요가 없습니다.
missaghi 2009

@rizzle : "IHttpHandler를 구현하는 클래스로 명시 적으로 해석"한다는 것은 무엇을 의미합니까? IHttpModule도 IHttpHandler라는 뜻입니까?

3
@Ryan : 모듈에서 HttpApplication.BeginRequest 이벤트에 메소드를 첨부하고 파일 확장자에 관계없이 선택한 핸들러를 제공 할 수 있습니다
missaghi

15

IHttpModule훨씬 더 많은 제어를 제공하므로 기본적으로 웹 응용 프로그램으로 향하는 모든 트래픽을 제어 할 수 있습니다 . IHttpHandler더 적은 제어를 제공하지만 (트래픽이 처리기에 도달 하기 전에 필터링 됨 ) 필요에 따라 충분하다면 IHttpModule.

어쨌든 별도의 클래스에 사용자 지정 논리를 둔 다음 IHttpModule또는 에서이 클래스를 사용하는 것이 가장 좋습니다 IHttpHandler. 이렇게하면 둘 중 하나를 선택하는 것에 대해 걱정할 필요가 없습니다. 사실, 당신은 어느 구현하는 별도의 클래스를 만들 수 모두 IHttpHandlerIHttpModule다음에 설정하여 사용할지 결정을 Web.config.


감사합니다. 원격 요청을 위해 웹 서버에 사용자 지정 인증을 추가하고 있지만 로컬 요청에는 사용하지 않는다고 설명해 주시겠습니까?
fkl

5

모듈은 요청이 실제로 처리기에 의해 처리되기 전과 후에 응용 프로그램에서 발생하는 이벤트를 처리하기위한 것입니다. 반면 핸들러는 애플리케이션 이벤트를 구독 할 기회가 주어지지 않고 대신 특정 요청을 처리하는 "주요"작업을 위해 호출되는 ProcessRequest 메소드를 가져옵니다.

Microsoft에서 제공하는이 문서를 살펴보십시오 ( "The request is processing by the HttpApplication pipeline"섹션의 페이지 중간 쯤에 있음).

http://msdn.microsoft.com/en-us/library/bb470252.aspx

15 단계에서 핸들러가 실행될 기회를 얻을 수 있습니다. 해당 단계 전후의 모든 이벤트는 모듈에서 차단할 수 있지만 처리기는 사용할 수 없습니다.

달성하려는 특정 기능에 따라 처리기 또는 모듈을 사용하여 업로드 처리기를 구현할 수 있습니다. 둘 다 사용하게 될 수도 있습니다.

고려할 사항은 이미 작성된 업로드 핸들러를 사용하는 것입니다.

다음은 무료 오픈 소스입니다.

http://www.brettle.com/neatupload

다음은 상업용입니다.

http://krystalware.com/Products/SlickUpload/

NeatUpload에 대한 문서를 보면 모듈을 구성해야한다는 것을 알 수 있습니다.


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