HttpApplication
is the web application instance that has multiple IHttpModule
instances registered in it. That‘s why every IHttpModule
instance handles a certain part of application execution thus can usually be reused on many applications (think of a Session
handling module or authentication module).
In terms of application/request handling there are many similarities. HttpApplication
has access to application-level events like OnStart, OnEnd etc as well as request-level events like OnBeginRequest, OnEndRequest etc. IHttpModule
on the other hand only has access to request-level events.
Additional note: It‘s possible to handle application start and end events even using an IHttpModule, but this is a non-documented feature and you have to take some special precautions. Check these two blog posts that explain it all into great depth:
Writing a customIHttpModule
that handlesApplication_OnStart
event
How to correctly useIHttpModule
to handleApplication_OnStart
event
I suggest you read a bit about application life cycle execution pipeline: