作者: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. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  2. 跟我一起云计算(5)——Shards

    什么是sharding Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库 (server)上,从而缓解单一数据库的性能问题.不太严格的讲,对于海量数据的数据库,如果是因为表多而 ...

  3. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  4. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  5. junit4进行单元测试

    一.前言 提供服务的时候,为了保证服务的正确性,有时候需要编写测试类验证其正确性和可用性.以前的做法都是自己简单写一个控制层,然后在控制层里调用服务并测试,这样做虽然能够达到测试的目的,但是太不专业了 ...

  6. jQuery学习之路(2)-DOM操作

    ▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...

  7. 最长回文子串-LeetCode 5 Longest Palindromic Substring

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  8. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  9. SharePoint 2013管理中心里【管理服务器上的服务】不见了

    打开管理中心,准备配置Managed Metadata Service,发现"管理服务器上的服务"不见了 那我自己拼url直接访问:http://xxxx/_admin/Serve ...

  10. 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案

    如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...