HTTP 모듈 및 HTTP 처리기 ASP.NET

이 문서에서는 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 확장 그룹을 처리할 수 있습니다. 모듈과 달리 요청을 처리하는 데는 하나의 처리기만 사용됩니다. 모든 처리기는 에 있는 인터페이스를 System.Web namespace구현 IHttpHandler 합니다. 처리기는 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 해야 합니다.