http.sys 是一个位于Win2003和WinXP SP2中的操作系统核心组件

能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。
  温馨提示:如果用户不慎删除了该驱动文件,不用担心,该驱动会在下次系统启动时重建。是一个删不掉的系统核心组件!实用程序结束该驱动,该驱动也会马上重新创建(只有粉碎文件才不能马上重建,但粉碎后,下次启动会重建)。
  微软在Windows
2003 Server里引进了新的HTTP API和kernel mode driver
Http.sys,目的是使基于Http服务的程序更有效率。这个改变的直接收益者就是IIS 6.0 和 asp.net.
  其实在Windows
XP安装SP2后,Http.sys已经出现在系统里了,但事实上,操作系统并没有真的使用这个内核级驱动,而XP上自带的IIS
5.1也没有使用HTTP API。
  新的HTTP API里最核心的变化都封装在Http.sys这个kernel mode
driver里了。在此之前,基于HTTP协议的程序都是在User mode下运行的,而且必须自己处理诸如软件中断、context
switch、线程调度等等问题,并且往往无法自由接触系统资源。过去,HTTP服务器,如IIS, Apache等都是利用Winsock
API来创建一个User mode下的network listener。Network listener通常独自(i.e.: per application
or per thread
basis)占用一个IP端口。通俗点说,就是在同一时间只有一个应用程序可以监听一个端口,这在有些时候是一个不太令人舒服的限制。
  新的Http.sys带来的好处大致有如下一些:
  1.
缓存 - 静态的内容现在被缓存于内核模式下,这使服务响应速度更快
  2. 记录
(Log)-IIS的log功能更快且标准化了
  3. 带宽控制 - greater scalability control and
throttling
  4. 可靠性 -
所有的服务请求会在Http.sys里暂存入队列,而不是由服务程序本身来处理,这样,即使服务程序重启,尚未被处理的请求也不会丢失了
  5.
IP端口重用 -
现在,只要是通过Http.sys管理的端口(基本包括了那些著名的端口,比如80),都可以同时允许多个程序同时监听了。

Http.sys是IIS 6.0使用的新型侦听器。在IIS
6.0出现之前,inetinfo.exe完成侦听HTTP请求的功能,同时还要将请求转发给对应的处理程序。从IIS
6.0开始,侦听器与inetinfo.exe分离开来,inetinfo.exe在用户模式下运行,Http.sys则完成侦听HTTP请求的功能,在
内核模式下运行。

1. 内核模式和用户模式

在Windows Server
2003中,一个进程既可以运行于内核模式,也可以运行于用户模式。如果一个进程运行于内核模式,那么这个进程就可以访问所有硬件和系统数据;如果一个进
程运行于用户模式,那么这个进程不能直接访问硬件,而且访问系统数据时也会受到限制。在Intel处理器架构中,内核模式运行于ring
0之内,而用户模式运行于ring
3。通过在内核模式运行Http.sys,侦听器可以直接访问TCP/IP协议栈,但是又能够位于WWW服务之外,这样就不会受到应用程序中代码缺陷的影
响,也不会因为应用程序崩溃而出现问题。

通过在内核模式运行,Http.sys获得了比较高的优先级,与先前版本的IIS相比,对HTTP请求响应速度比较快。Http.sys不仅因为具
有较高的优先级而提高了IIS的性能,而且,还可以在等待应用程序响应(即使应用程序已经停止响应)的同时,将请求进行排队。在IIS
6.0中,每个应用程序池都拥有一个内核模式队列,Http.sys可以将请求转发给合适的队列。所以,在IIS
6.0中,当我们对性能进行调优时,可以将负载比较重的应用程序分隔到不同的应用程序池,从而使负载比较轻的应用程序不必与负载较重的应用程序共享同一个
队列。对每个应用程序池而言,队列规模是可配置的。

Http.sys可以将请求进行缓存,并尽可能地在内核模式中完成对请求的服务。如果某个请求的响应已经得到了缓存,那么IIS就无须重新处理这个
请求,Http.sys只需要将这个响应从缓存中取出,这样就绕开了所有的IIS功能,从而也就避免了重新处理。这些已缓存的请求都保存在内存中,并且不
允许换出,因此,尽可能地增大系统内存是提高IIS性能的一种简单有效的方法。

尽可能地增大系统内存还能够减少inetinfo.exe的磁盘交换次数。inetinfo.exe运行于用户模式,可以在必要时交换到磁盘空间。如果系统内存过少,那么IIS的性能会急剧下降。

2. 其他Http.sys功能

针对HTTP请求和响应,Http.sys还能够处理TCP/IP连接,包括创建连接和断开连接。因为Http.sys直接运行于TCP/IP协议栈之上,因此还需要处理连接和超时,以及连接数限制和带宽不足。此外,Http.sys还需要处理日志。

Http.sys通过执行两项重要功能来提高IIS
6.0的性能。首先,Http.sys在内核模式下对请求进行缓存,因此,为了给某个请求提供服务,如果该请求所需内容最近已经为先前某个请求提供服务
(无论是提供静态内容还是提供动态内容),那么可以在内核模式下直接为该请求提供其所需内容,而不需要再切换到用户模式下在inetinfo.exe进程
中运行。

Http.sys还可以将请求进行排队,由合适的工作进程完成对请求的服务。每个应用程序池都拥有自己的队列,队列的规模是可以配置的,这样,我们
可以对某个具体应用程序池的性能进行调优。针对可能会发生失效的应用程序,使用队列还有另一个优点,就是针对失效应用程序的请求仍然会保存在队列中,直到
队列中保存的请求总数达到该队列的上限。当应用程序能够重新进行响应时,这些请求仍然能够得到处理;此外,通过自动重启发生失效的应用程序池,还能够降低
响应时间,从用户看来,应用程序的响应仅仅是稍微延迟了一点。

转 HTTP.SYS 详解的更多相关文章

  1. HTTP.SYS 详解 (网络转载)

    http.sys 是一个位于Win2003和WinXP SP2中的操作系统核心组件, 能够让任何应用程序通过它提供的接口,以http协议进行信息通讯. 温馨提示:如果用户不慎删除了该驱动文件,不用担心 ...

  2. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  3. ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 1.1. 名词解释 1.2. Kestrel基本工作原理 1.2.1. Kestrel的基本架构 1.2.2. Ke ...

  4. [转帖]ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 https://www.cnblogs.com/vipyoumay/p/7525478.html ASP.NET C ...

  5. (转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  6. 小白的Python之路 day5 os,sys模块详解

    os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...

  7. (转载) Linux IO模式及 select、poll、epoll详解

    注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案 ...

  8. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  9. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

随机推荐

  1. source insight 4.0的基本使用方法(转)

    源:source insight 4.0的基本使用方法 source insight 4设置

  2. Google发布机器学习平台Tensorflow游乐场~带你玩神经网络(转载)

    Google发布机器学习平台Tensorflow游乐场-带你玩神经网络 原文地址:http://f.dataguru.cn/article-9324-1.html> 摘要: 昨天,Google发 ...

  3. linux内核源码在线浏览

    1.https://elixir.bootlin.com  (只能搜索函数和宏定义,功能单一) 2.https://lxr.missinglinkelectronics.com (比第一个功能多一些, ...

  4. CF_321_B_NetFlow

    CF_321_B 题面:据说题目描述是游戏王的规则,然而我并没有玩过.大概意思就是我方有m张攻击牌,敌方有n张牌(防御,攻击都有),如果一回合我方选择攻击牌(X)攻击敌方防守牌(Y)且$Vval_X ...

  5. Bitmap 位图

    转自: http://dongxicheng.org/structure/bitmap/ 1.  概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用.本文介绍了位图的实现 ...

  6. Codeforces Round #419 (Div. 2) A. Karen and Morning(模拟)

    http://codeforces.com/contest/816/problem/A 题意: 给出一个时间,问最少过多少时间后是回文串. 思路: 模拟,先把小时的逆串计算出来: ① 如果逆串=分钟, ...

  7. Solidity 官方文档中文版 1_简介

    简介 Solidity是一种语法类似JavaScript的高级语言.它被设计成以编译的方式生成以太坊虚拟机代码.在后续内容中你将会发现,使用它很容易创建用于投票.众筹.封闭拍卖.多重签名钱包等等的合约 ...

  8. iframe.contentWindow介绍

    一.在使用iframe的页面,要操作这个iframe里面的DOM元素可以用: contentWindow.contentDocument(测试的时候chrome浏览器,要在服务器环境下) 1.先获取i ...

  9. 一.UTF8字符集csv文件在oracle下乱码问题处理

    1.问题描述 在excel中生成了一个UTF-8编码格式的csv文件准备导入数据库,在notpad++下打开显示正常,编码集为UTF-8,通过pl/sql dev导入oracle是出现乱码,此时初步推 ...

  10. Android orm 框架xUtils简介

    数据库操作建议用ORM框架,简单高效.这里推荐xUtils,里面包含DBUtils.github地址:https://github.com/wyouflf/xUtils 获得数据库实例建议用单例模式. ...