1 工具

1.1 dnSpy

众所周知,C# 代码都会编译成 IL (Intermediate Language) 代码,然后被运行时 (Runtime) 执行,目前使用的运行时主要有 .Net Framework, CoreCLR 和 Mono。通过 …

1 Introduction

ASP.NET Core 功能本质上就是将请求的路径找到对应处理过程,在 ASP.NET Core 中将最终处理的过程叫做 EndPoint 。请求的起点到 EndPoint 的过程是叫做 Middleware

1. Introduction

Header Propagation 顾名思义就是将请求的 Header 进行传递,整个流程大致如下:

1 Introduction

CORS 是 Cross-Origin Resource Sharing 的缩写,它可以用来指定某个服务的资源可以被哪些请求的 Origin 使用,违反这个策略请求的响应会被浏览器拒绝掉。

1. Overview

我们都知道缓存 ( cache ) 是提高性能的法宝。内存,数据库,网络中缓存机会无处不在,在 Web 应用程序同样也是如此。比如浏览器在打开一个网页的时候,如果需要加载图片,CSS 或者 JavaScript 资源的时候,如果之前浏览器下载过这些资源,就可以跳过 HTTP 请求的部分,这是浏览器私有的缓存。

1. Overview

在任何时刻,计算资源总是稀缺资源。为了保证我们的服务能够保证服务请求的质量,通常只会允许一部分请求同时处理。对于剩下的请求,直接返回失败的结果。这也是应对故障的一种方式,为了保证部分请求的 SLA (Service Level Agreement),而牺牲掉一部分请求的方式。

1 Overview

我们都知道 Https 请求访问是安全的,因为通过 SSL 层加密,可以保证不被中间人攻击。所以一般而言,Web 服务应该只向公网暴露 Https 的端口。但是如果客户端客户端仍然是通过 Http 请求访问,我们需要有一个中间件,通过 Redirect 方式将其映射到 Https 服务的端口。而且还需要让客户端(浏览器)记住在接下来访问的时候,应该直接访问 Https 端口。

  1. HtsMiddleware

2. HttpsRedirectionMiddleware

首先看一下 HttpsRedictionOptions 这个类

  • HttpsPort Https 服务选择的端口号
  1. 如果 FeatureCollections 中的 ServerAddressFeature 中有 Https 的端口,则选择这个端口。注意有多个端口,则仍然表示失败
  1. 如果没有找到 Https 的端口,则继续处理
  2. 将原本的 hostHttpsport 拼接成新的 host (注意,一般默认 https 访问 443 端口,所以无需显示标记
  3. 接下来为 response 修改相应的内容:1) 重定向的地址;2)状态响应码;3)将重定向的地址放在 Header 中;4)完成任务,不执行后续的中间件

3 HstsMiddleware

HTTP Strict-Transport-Security (HSTS) 是相应的 Header 中的一项,它可以让浏览器在访问这个站点的时候,请使用 Https , 比如说

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • IncludeSubDomains 指定 subdomain 也同样适用
  1. 如果 Host 在预定义列表中,比如 localhost , 则交给下一个处理
  2. 否则为请求的 Header 中添加 Hsts 记录。

1 Overview

Session 的作用是什么呢?我们都知道 Http 协议是无状态的,也就是说每次 Http 请求都是独立的,它们之间不会知道彼此之间的联系。而 Session 的机制可以让 Http 请求存在相关性。

1 Overview

ASP.NET core 中对静态文件的处理的中间件是 Microsoft.AspNetCore.StaticFiles 这个包。其中包含了如下的中间件:

  • DirectoryBrowserMiddleware
  • StaticFileMiddleware

Feng Gao

A software developer in Microsoft at Suzhou. Most articles spoken language is Chinese. I will try with English when I’m ready

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store