作者: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. Xcode模拟器启动不了,修复ios模拟器

    1.如果可以重置模拟器 首先试试重置模拟器 2.如果不能重置,可以选择使用如下命令杀死模拟器服务: killall -9 com.apple.CoreSimulator.CoreSimulatorSe ...

  2. 23种设计模式--中介者模式-Mediator Pattern

    一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...

  3. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  4. Android带加减的edittext

    看了网上这样自带加减的edittext写得好复杂,还有各种监听事件,我觉得没有必有.于是我自己写了一个. 我这个edittext仅仅限制整数,每次加减1. public class TestEditT ...

  5. 【WPF】日常笔记

    本文专用于记录WPF开发中的小细节,作为备忘录使用. 1. 关于绑定: Text ="{Binding AnchorageValue,Mode=TwoWay,UpdateSourceTrig ...

  6. PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...

  7. Javascript学习笔记

    Javascript 2016年12月19日整理 JS基础 Chapter1 JS是一门运行在浏览器客户端的脚本编程语言,前台语言 组成部分 1. ECMAscript JS标准 2. DOM 通过J ...

  8. 体验报告:微信小程序在安卓机和苹果机上的区别

    很多人可能会问:微信小程序和在微信里面浏览一个网页有什么区别? 首先,小程序的运行是全屏的,界面跟进入了一个APP很像,更为沉浸跟在微信里面访问h5不一样:其次,它的浏览体验更为稳定. 不过,这还不够 ...

  9. H5 canvas的 width、height 与style中宽高的区别

    Canvas 的width height属性 1.当使用width height属性时,显示正常不会被拉伸:如下 <canvas id="mycanvas" width=&q ...

  10. App解读

    一直不懂别人口中说的原生开发.混合式开发.今天突然看了一篇文章讲解的是什么叫做原生App?移动 Web App?混合APP?分享给大家. 原生App是专门针对某一类移动设备而生的,它们都是直接安装到设 ...