ASP.NET HTTP 모듈 및 HTTP 처리기
이 문서에서는 ASP.NET HTTP(Hypertext Transfer Protocol) 모듈 및 HTTP 처리기를 소개합니다.
원래 제품 버전: ASP.NET
원래 KB 번호: 307985
요약
HTTP 모듈 및 HTTP 처리기는 ASP.NET 아키텍처의 필수적인 부분입니다. 요청이 처리되는 동안 각 요청은 여러 HTTP 모듈(예: 인증 모듈 및 세션 모듈)에 의해 처리된 다음 단일 HTTP 처리기에 의해 처리됩니다. 처리기가 요청을 처리한 후 요청은 HTTP 모듈을 통해 다시 흐릅니다.
HTTP 모듈 개요
모듈은 처리기가 실행되기 전과 후에 호출됩니다. 모듈을 사용하면 개발자가 각 개별 요청을 가로채거나 참여하거나 수정할 수 있습니다. 모듈은 네임스페이 IHttpModule
스에 있는 인터페이스를 System.Web
구현합니다.
HTTP 모듈이 동기화할 수 있는 사용 가능한 이벤트
클래스는 HttpApplication
모듈이 동기화할 수 있는 여러 이벤트를 제공합니다. 모듈이 각 요청에서 동기화할 수 있는 이벤트는 다음과 같습니다. 이러한 이벤트는 순차적으로 나열됩니다.
BeginRequest
: 요청이 시작되었습니다. 요청 시작 부분에서 작업을 수행해야 하는 경우(예: 각 페이지의 맨 위에 광고 배너 표시) 이 이벤트를 동기화합니다.AuthenticateRequest
: 사용자 고유의 사용자 지정 인증 체계를 연결하려는 경우(예: 데이터베이스에 대해 사용자를 조회하여 암호 유효성 검사) 이 이벤트를 동기화하고 사용자가 원하는 방법을 인증하는 모듈을 빌드합니다.AuthorizeRequest
: 이 이벤트는 내부적으로 권한 부여 메커니즘을 구현하는 데 사용됩니다(예: 파일 시스템이 아닌 데이터베이스에 ACL(액세스 제어 목록)을 저장). 이 이벤트를 재정의할 수 있지만 그렇게 하는 데는 좋은 이유가 많지 않습니다.ResolveRequestCache
: 이 이벤트는 출력 캐시에서 페이지를 제공 할 수 있는지 여부를 결정합니다. 사용자 고유의 캐싱 모듈(예: 메모리 캐시가 아닌 파일 기반 캐시 빌드)을 작성하려는 경우 이 이벤트를 동기화하여 캐시에서 페이지를 제공할지 여부를 결정합니다.AcquireRequestState
: 상태 저장소에서 세션 상태가 검색됩니다. 사용자 고유의 상태 관리 모듈을 빌드하려면 이 이벤트를 동기화하여 상태 저장소에서 세션 상태를 가져옵니다.PreRequestHandlerExecute
: 이 이벤트는 HTTP 처리기가 실행되기 전에 발생합니다.PostRequestHandlerExecute
: 이 이벤트는 HTTP 처리기가 실행된 후에 발생합니다.ReleaseRequestState
: 세션 상태가 상태 저장소에 다시 저장됩니다. 사용자 지정 세션 상태 모듈을 빌드하는 경우 상태를 상태 저장소에 다시 저장해야 합니다.UpdateRequestCache
: 이 이벤트는 출력을 출력 캐시에 다시 씁니다. 사용자 지정 캐시 모듈을 빌드하는 경우 출력을 캐시에 다시 씁니다.EndRequest
: 요청이 완료되었습니다. 요청 전체에서 정보를 수집한 다음 페이지에 정보를 쓰는 디버깅 모듈을 빌드할 수 있습니다.
모듈이 각 요청 전송에 대해 동기화할 수 있는 이벤트는 다음과 같습니다. 이러한 이벤트의 순서는 비결정적입니다.
PreSendRequestHeaders
: 이 이벤트는 헤더가 전송되기 전에 발생합니다. 헤더를 추가하려는 경우 사용자 지정 모듈에서 이 이벤트를 동기화할 수 있습니다.PreSendRequestContent
: 이 이벤트는 메서드를 호출할Response.Flush
때 발생합니다. 콘텐츠를 추가하려는 경우 사용자 지정 모듈에서 이 이벤트를 동기화할 수 있습니다.Error
: 이 이벤트는 처리되지 않은 예외가 발생할 때 발생합니다. 사용자 지정 오류 처리기 모듈을 작성하려면 이 이벤트를 동기화합니다.
HTTP 모듈 구성
<httpModules>
구성 섹션 처리기는 애플리케이션 내에서 HTTP 모듈을 구성하는 역할을 담당합니다. 컴퓨터, 사이트 또는 애플리케이션 수준에서 선언할 수 있습니다. 섹션 처리기에 다음 구문을 <httpModules>
사용합니다.
<httpModules>
<add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<clear />
</httpModules>
HTTP 모듈 만들기
HTTP 모듈을 만들려면 인터페이스를 IHttpModule
구현해야 합니다. IHttpModule
인터페이스에는 다음 서명이 있는 두 가지 메서드가 있습니다.
void Init(HttpApplication);
void Dispose();
HTTP 처리기 개요
처리기는 개별 엔드포인트 요청을 처리하는 데 사용됩니다. 처리기를 사용하면 ASP.NET 프레임워크가 애플리케이션 내의 개별 HTTP URL 또는 URL 확장 그룹을 처리할 수 있습니다. 모듈과 달리 요청을 처리하는 데 하나의 처리기만 사용됩니다. 모든 처리기는 에 IHttpHandler
있는 인터페이스를 System.Web namespace
구현합니다. 처리기는 ISAPI(Internet Server Application Programming Interface) 확장과 유사합니다.
HTTP 처리기 구성
<httpHandlers>
구성 섹션 처리기는 들어오는 URL을 또는 IHttpHandlerFactory
클래스에 매핑합니다IHttpHandler
. 컴퓨터, 사이트 또는 애플리케이션 수준에서 선언할 수 있습니다. 하위 디렉터리에서 이러한 설정을 상속합니다.
관리자는 태그 지시문을 사용하여 <add>
섹션을 구성합니다 <httpHandlers>
. <Add>
지시문은 하향식 순차적으로 해석되고 처리됩니다. 섹션 처리기에 다음 구문을 <httpHandler>
사용합니다.
<httpHandlers>
<add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
<remove verb="[verb list]" path="[path/wildcard]" />
<clear />
</httpHandlers>
HTTP 처리기 만들기
HTTP 처리기를 만들려면 인터페이스를 IHttpHandler
구현해야 합니다. 인터페이스에는 IHttpHandler
다음 시그니처가 있는 하나의 메서드와 하나의 속성이 있습니다.
void ProcessRequest(HttpContext);
bool IsReusable {get;}
참고 항목
HTTP 처리기에서 세션 상태가 필요한 경우 인터페이스도 구현 IRequiresSessionState
해야 합니다.