ASP.NET Core 中文文档 第三章 原理(15)请求功能
作者: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
定义 ISessionFactory
和 ISession
抽象接口以支持用户会话。
ITlsConnectionFeature
定义一个检索客户端证书的 API。
ITlsTokenBindingFeature
定义用来处理 TLS token 绑定参数的方法。
注意
ISessionFeature 不是一个服务器功能,而是由 SessionMiddleware 实现的 (见 Managing Application State)。
功能集合
Features 的 HttpContext 属性提供了一个接口用于获取和设置当前请求可用的 HTTP 功能。由于功能集合在请求上下文中都是可变的,那么中间件也可以用来修改集合以及添加对额外的功能支持。
中间件和请求特性
虽然服务器是负责创建功能集合的,但中间件既可以给集合添加功能也可以从中取用功能。例如,静态文件中间件 IHttpSendFileFeature 就会使用文件发送功能 IHttpSendFileFeature 。如果该功能存在,则用它把请求的物理路径中的静态文件发送出去,否则,会采用一个比较慢的发送文件的备用方法。当功能可用的时候,IHttpSendFileFeature
允许操作系统打开文件,并且直接执行内核模式拷贝到网卡。
此外,中间件可以添加到由服务器建立的功能集合里面。中间件甚至可以取代现有的功能,允许中间件增加服务器的功能。添加到集合中的功能对请求管道中靠后面的其他中间件或者基础应用程序本身会立即生效。
通过结合自定义的服务器实现和特定的中间件增强,可以构造出应用程序所需的精炼的功能集合。这使得无需改动服务器就可以添加缺失的功能,并确保只有最小数量的功能被公开,从而减少攻击面并提供性能。
总结
功能接口定义给定请求可能支持的特殊功能。服务器定义功能集合,以及该服务器所支持功能的初始集,而中间件则可用来增强这些功能。
其他资源
ASP.NET Core 中文文档 第三章 原理(15)请求功能的更多相关文章
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- ASP.NET Core 中文文档 第三章 原理(1)应用程序启动
原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...
- ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态
原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...
- ASP.NET Core 中文文档 第三章 原理(16).NET开放Web接口(OWIN)
原文:Open Web Interface for .NET (OWIN) 作者:Steve Smith. Rick Anderson 翻译:谢炀(kiler398) 校对:孟帅洋(书缘) ASP.N ...
- ASP.NET Core 中文文档 第三章 原理(2)中间件
原文:Middleware 作者:Steve Smith.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:许登洋(Seay) 章节: 什么是中间件 用 IApplicationBu ...
- ASP.NET Core 中文文档 第三章 原理(3)静态文件处理
原文:Working with Static Files 作者:Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay).孟帅洋(书缘) 静态文 ...
- ASP.NET Core 中文文档 第三章 原理(10)依赖注入
原文:Dependency Injection 作者:Steve Smith 翻译:刘浩杨 校对:许登洋(Seay).高嵩 ASP.NET Core 的底层设计支持和使用依赖注入.ASP.NET Co ...
- ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作
原文: Working with Multiple Environments 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管 ...
- ASP.NET Core 中文文档 第三章 原理(17)为你的服务器选择合适版本的.NET框架
原文:Choosing the Right .NET For You on the Server 作者:Daniel Roth 翻译:王健 校对:谢炀(Kiler).何镇汐.许登洋(Seay).孟帅洋 ...
- ASP.NET Core 中文文档 第三章 原理(4)路由
原文:Routing 作者:Ryan Nowak.Steve Smith. Rick Anderson 翻译:张仁建(Stoneqiu) 校对:许登洋(Seay).谢炀(kiler398).孟帅洋(书 ...
随机推荐
- 0-1背包问题蛮力法求解(c++版本)
// 0.1背包求解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #define ...
- HTML5 语义元素(一)页面结构
本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- nodejs项目mysql使用sequelize支持存储emoji
nodejs项目mysql使用sequelize支持存储emoji 本篇主要记录nodejs项目阿里云mysql如何支持存储emoji表情. 因由 最近项目遇到用户在文本输入emoji进行存储的时候导 ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- TFS 测试用例步骤数据统计
TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...
- SEED实验系列文章目录
美国雪城大学SEEDLabs实验列表 SEEDLabs是一套完整的信息安全实验,涵盖本科信息安全教学中的大部分基本原理.项目组2002年由杜文亮教授创建,目前开发了30个实验,几百所大学已采用.实验楼 ...
- 闭区间套定理(Nested intervals theorem)
① ②这里用到了极限与不等关系 ③如果a≠b,那么便不会有$\lim _{n\rightarrow \infty }\left| I_n \right| =0$ ④如果还存在一点c在内,那么同样也不会 ...
- 让Mono 4在Raspberry Pi上飞
最近公司有项目想要在树莓派上做,代替原来的工控机(我们是把工控主机当作小的主机用,一台小的工控主机最少也要600左右,而树莓派只要200多).于是,公司买了一个Raspberry Pi B+和一个Ra ...
- 小小改动帮你减少bundle.js文件体积(翻译)
我已经从事过好多年的SPA开发工作,我发现很多的程序猿都从来不往 bundle.js 文件的体积上动脑筋,这让我有点懵逼. “安心洗路,等俺把代码混淆压缩后就一切666了”,若是有人这么说,我会翻白眼 ...