zoukankan      html  css  js  c++  java
  • asp.net请求响应模型原理随记回顾

    asp.net请求响应模型原理随记回顾:

    根据一崇敬的讲师总结:(会存在些错误,大家可以做参考)

    1.-当在浏览器输入url后,客户端会将请求根据http协议封装成为http请求报文。并通过主socket创建新的socket对象传输请求报文。(请求服务器端的端口为80端口)

    2.当socket到达80端口后,这时监听80端口的socket会创建新的socket代理来,开辟新的socket端口,进行通信,请求报文信息会被操作系统的内核模式kernalModel的http.sys(驱动级别)进行解析并负责将请求分发具体的处理程序。(http.sys其实可以看做是插件模型,即管道模型,通过系统注册表向这个管道注册处理程序,这样请求信息就会被注册处理程序截获过滤执行)。

    3.http.sys解析出请求时80端口并根据注册表找到对应处理程序,之后交给了寄宿在svchost.exe中的w3svc服务,它会判断请求文件的后缀,如果是静态页,js等静态资源,便直接在iis内部处理再通过通信端口返回响应信息。如果是.aspx,就会找到相应的处理程序(可以看出iis也是插件模型)即aspnet_isapi.dll(非托管用c++写的)。

    4. aspnet_isapi.dll会通过ecb操作系统句柄(标志系统一些资源)这样托管环境就能访问报文信息(可以看出aspnet_isapi.dll是托管和非托管环境的一个桥梁);之后传给isapiruntime,通过ecb指针创建一个httpworkrequest对象(对http报文做最初的封装处理)之后再交给httpruntime对象,它会对httpworkrequest对象做进一步封装,通过创建httpcontext,将httpworkrequest封装到httpcontext的httprequest对象中(返回的相应报文会封装到httpcontext的httpresponse中)。

    5.之后HttpApplicationFactory创建一个HttpApplication管道(这里使用了对象池,因为HttpApplication通过反射创建好资源,如果对象池中有的话,直接取出来,和线程池,应用程序池,一般处理程序池都是一样的,httpapplication管道当然也是插件模型了,通过httpModule注册事件),这时httpcontext会流经这个管道,注册的处理程序便可以截获过滤httpcontext了。(httpallication共有23个事件,19个事件可以让开发者使用,-httpapplication的第7个事件获得缓存,8事件:创建最终处理当前请求的handler实例;在11和12个事件之间会调用执行一般处理程序(handler的pr方法处理请求);)

  • 相关阅读:
    Git设置HTTP/HTTPS代理服务器
    队列(Queue)顺序存储C语言实现
    二叉树前序序列和中序序列转为后序序列
    CFileDialog对话框中,如何修改对话框标题
    轻型读写锁 Slim Reader/Writer (SRW) Locks
    PC lint -sem 用法示例
    C# Linq 取得两个列表的交集
    wpf datagrid row的命中测试
    C# Unit Test 备注
    DataGrid 滚动特定的行或者列
  • 原文地址:https://www.cnblogs.com/guozefeng/p/3444643.html
Copyright © 2011-2022 走看看