作者:Steve Smith
翻译:谢炀(kiler398)
校对:姚阿勇(Dr.Yao)孟帅洋(书缘)

涉及到如何处理 HTTP 请求以及响应的独立 Web 服务器功能已经被分解成独立的接口,这些抽象被独立的服务器实现和中间件用于创建和修改应用程序的托管管道。

章节:

功能接口

ASP.NET Core 定义了许多 HTTP 功能接口,给服务器用来判断支持哪些功能。Web 服务器最基础功能就是处理请求并返回响应,下面是实现这个功能所涉及的接口:

IHttpRequestFeature
定义HTTP请求的结构,包括协议、路径、查询字符串、请求头以及正文。

IHttpResponseFeature
定义HTTP响应的结构,包括状态码、响应头以及响应正文。

IHttpAuthenticationFeature
定义对基于 ClaimsPrincipal 识别用户的支持以及指定验证处理程序。

IHttpUpgradeFeature
定义对 HTTP 升级 的支持, 允许客户端在服务器希望切换协议的时候指定自己想要使用的协议。

IHttpBufferingFeature
定义用于禁用请求和/或响应的缓冲的方法。

IHttpConnectionFeature
定义本地和远程地址以及端口的属性。

IHttpRequestLifetimeFeature
定义支持中止连接,或者对请求提前终止的检测,比如客户断开连接等原因。

IHttpSendFileFeature
定义一个异步发送文件的方法。

IHttpWebSocketFeature
定义一个支持 Web Sockets 的 API。

IHttpRequestIdentifierFeature
添加一个可以实现唯一标识请求的属性。

ISessionFeature
定义 ISessionFactoryISession 抽象接口以支持用户会话。

ITlsConnectionFeature
定义一个检索客户端证书的 API。

ITlsTokenBindingFeature
定义用来处理 TLS token 绑定参数的方法。

注意
ISessionFeature 不是一个服务器功能,而是由 SessionMiddleware 实现的 (见 Managing Application State)。

功能集合

FeaturesHttpContext 属性提供了一个接口用于获取和设置当前请求可用的 HTTP 功能。由于功能集合在请求上下文中都是可变的,那么中间件也可以用来修改集合以及添加对额外的功能支持。

中间件和请求特性

虽然服务器是负责创建功能集合的,但中间件既可以给集合添加功能也可以从中取用功能。例如,静态文件中间件 IHttpSendFileFeature 就会使用文件发送功能 IHttpSendFileFeature 。如果该功能存在,则用它把请求的物理路径中的静态文件发送出去,否则,会采用一个比较慢的发送文件的备用方法。当功能可用的时候,IHttpSendFileFeature 允许操作系统打开文件,并且直接执行内核模式拷贝到网卡。

此外,中间件可以添加到由服务器建立的功能集合里面。中间件甚至可以取代现有的功能,允许中间件增加服务器的功能。添加到集合中的功能对请求管道中靠后面的其他中间件或者基础应用程序本身会立即生效。

通过结合自定义的服务器实现和特定的中间件增强,可以构造出应用程序所需的精炼的功能集合。这使得无需改动服务器就可以添加缺失的功能,并确保只有最小数量的功能被公开,从而减少攻击面并提供性能。

总结

功能接口定义给定请求可能支持的特殊功能。服务器定义功能集合,以及该服务器所支持功能的初始集,而中间件则可用来增强这些功能。

其他资源

返回目录

ASP.NET Core 中文文档 第三章 原理(15)请求功能的更多相关文章

  1. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  2. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

  3. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  4. ASP.NET Core 中文文档 第三章 原理(16).NET开放Web接口(OWIN)

    原文:Open Web Interface for .NET (OWIN) 作者:Steve Smith. Rick Anderson 翻译:谢炀(kiler398) 校对:孟帅洋(书缘) ASP.N ...

  5. ASP.NET Core 中文文档 第三章 原理(2)中间件

    原文:Middleware 作者:Steve Smith.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:许登洋(Seay) 章节: 什么是中间件 用 IApplicationBu ...

  6. ASP.NET Core 中文文档 第三章 原理(3)静态文件处理

    原文:Working with Static Files 作者:Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay).孟帅洋(书缘) 静态文 ...

  7. ASP.NET Core 中文文档 第三章 原理(10)依赖注入

    原文:Dependency Injection 作者:Steve Smith 翻译:刘浩杨 校对:许登洋(Seay).高嵩 ASP.NET Core 的底层设计支持和使用依赖注入.ASP.NET Co ...

  8. ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作

    原文: Working with Multiple Environments 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管 ...

  9. ASP.NET Core 中文文档 第三章 原理(17)为你的服务器选择合适版本的.NET框架

    原文:Choosing the Right .NET For You on the Server 作者:Daniel Roth 翻译:王健 校对:谢炀(Kiler).何镇汐.许登洋(Seay).孟帅洋 ...

  10. ASP.NET Core 中文文档 第三章 原理(4)路由

    原文:Routing 作者:Ryan Nowak.Steve Smith. Rick Anderson 翻译:张仁建(Stoneqiu) 校对:许登洋(Seay).谢炀(kiler398).孟帅洋(书 ...

随机推荐

  1. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  2. java Web项目创建之一(普通java web项目的创建与发布)

    1.创建新的web项目 file->new_>Dynamic Web Project(如图) 或file->new->Project->Web->Dynamic W ...

  3. python笔记(持续更新)

    1.编译python遇到下面的编码问题:     SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...

  4. C#中5步完成word文档打印的方法

    在日常工作中,我们可能常常需要打印各种文件资料,比如word文档.对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作.特别是提到Web打印,这的确会很棘手.一般如果要想选 ...

  5. 深入浅出Redis-redis哨兵集群

    1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所 ...

  6. JAVA程序员常用软件整理下载

    ********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...

  7. 如何区别char与varchar?

    1.varchar与char两个数据类型用于存储字符串长度小于255的字符,MySQL5.0之前是varchar支持最大255.比如向一个长度为40个字符的字段中输入一个为10个字符的数据.使用var ...

  8. windows 7(32/64位)GHO安装指南(序篇)~

    大家好,本人是高三刚毕业,即将踏入校园的程序猿~我写这篇文章呢,主要是想巩固一下之前对于电脑的基础知识理论,也希望能帮助没有电脑基础的同学能维护一下自己的电脑,要是能帮助女生修电脑那就是更好啦~~哈哈 ...

  9. Linux实战教学笔记07:Linux系统目录结构介绍

    第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...

  10. The first documents

    Mark~ 赶在2016年的年末,来开了一个blog. 想想以前开设的blog还是十多年前,时光飞逝~~ 开设这个blog的主要目的是用于自己平时一些知识的记录. 希望能在未来很长一段时间能坚持学习与 ...