作者: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. 常见CSS与HTML使用误区

       误区一.多div症 <div class="nav"> <ul> <li><a href="/home/"> ...

  2. 数据库的快照隔离级别(Snapshot Isolation)

    隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...

  3. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  4. Linux学习之探索文件系统

    Linux,一起学习进步-    ls With it, we can see directory contents and determine a variety of important file ...

  5. ASP.NET MVC学习之母版页和自定义控件的使用

    一.母板页_Layout.cshtml类似于传统WebForm中的.master文件,起到页面整体框架重用的目地1.母板页代码预览 <!DOCTYPE html> <html> ...

  6. GOF23设计模式之单例模式

    ·核心作用: -保证一个类只有一个实例,并且提供一个访问该实例的全局访问点. ·常见应用场景: -Windows的Task Manager(任务管理器)就是很典型的单例模式 -Windows的Recy ...

  7. 反应器(Reactor)和主动器(Proactor)

    网络方面用的比较多的库是libevent和boost.asio,两者都是跨平台的.其中libevent是基于Reactor实现的,而boost.asio是基于Proactor实现的.Reactor和P ...

  8. 敏捷转型历程 - Sprint3 Grooming

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...

  9. js实现四大经典排序算法

    为了方便测试,这里写了一个创建长度为n的随机数组 function createArr(n) { var arr = []; while (n--) { arr.push(~~(Math.random ...

  10. ENode框架单台机器在处理Command时的设计思路

    设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...