# HTTP handler

An ASP.NET HTTP handler is a process that runs in response to a request made to an ASP.NET Web application. The most common handler is the ASP.NET page handler that processes .aspx files. When users request an .aspx file, the request is processed by the page through the page handler.
HTTP handlers are an essential component of the ASP.NET framework, providing a low-level way to interact with incoming HTTP requests. They offer developers fine-grained control over how specific requests are processed, allowing for custom handling of various file types or URL patterns.
HTTP handlers were not present in the "Classic" ASP. They implement the System.Web.IHttpHandler interface. Unlike ASP.NET Web Forms, they have no HTML-markup file, no events and other supporting. All they have is a code-file (written in any .NET-compatible language) that writes some data to the server HTTP response. HTTP handlers are similar to ISAPI extensions.
The IHttpHandler interface defines two key members: 1.IsReusable: A boolean property indicating whether the handler can be reused for multiple requests. 2.ProcessRequest: A method that contains the actual request processing logic.
Developers can create custom HTTP handlers to implement specialized functionality, such as: 1. Generating dynamic images or documents on-the-fly. 2. Implementing custom authentication or authorization schemes. 3. Handling specific file types or URL patterns in a unique way. 4. Creating RESTful web services.
An HTTP module is an assembly that is called on every request that is made to your application. HTTP modules are called as part of the ASP.NET request pipeline and have access to life-cycle events throughout the request. HTTP modules let you examine incoming and outgoing requests and take action based on the request.
While HTTP handlers are responsible for generating the response to a specific request, HTTP modules can intercept and process all requests that pass through the ASP.NET pipeline. This makes modules ideal for implementing cross-cutting concerns such as logging, security, or performance monitoring.
Unlike ASP.NET Web Forms, that have ".aspx" file extension, ASP.NET handlers by default have ".ashx" file extension.
Handlers are considered to be more lightweight object than ASP.NET Web Forms. That is why they are used to serve dynamically-generated images, on-the-fly generated PDF-files and similar content to the web browser.
To configure an HTTP handler in an ASP.NET application, developers can use the <httpHandlers> section in the web.config file. This allows for mapping specific file extensions or URL patterns to custom handler classes.
With ASP.NET Core, this HTTP handlers have been replaced with "middleware" ApplicationBuilders (IApplicationBuilder) which allow routing requests based on request headers instead of just the URL path.
The transition to middleware in ASP.NET Core represents a significant shift in the request processing model. Middleware components are more flexible and can be easily chained together to form a request processing pipeline. This new approach offers several advantages: 1. Greater modularity and reusability of request processing components. 2. Simplified configuration and setup compared to the handler/module system. 3. Improved performance due to reduced overhead in request processing. 4. Better support for asynchronous processing and modern programming patterns.
Despite these changes, the core concepts behind HTTP handlers remain relevant in understanding how web applications process and respond to HTTP requests, making them an important topic for ASP.NET developers to study.