Middleware (3) — HttpsPolicy

1 Overview

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

所以我们提供了两个中间件来完成这个工作 :

  1. HttpsRedirctionMiddleware

接下来我们看一下这两个中间件是怎么工作的。

2. HttpsRedirectionMiddleware

首先看一下 HttpsRedictionOptions 这个类

包含了两个属性

  • RedirectStatusCode Response 返回的状态码,默认是 307

那么如果 HttpsPort 没有指定,该如何寻找呢?

步骤如下

  1. 如果 _config 中制定了 HTTPS_PORT 或者 ANCM_HTTPS_PORT ,则找到端口号

现在所有的准备工作完毕,开始准备处理请求

  1. 如果是 https 请求,则继续处理

3 HstsMiddleware

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

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age 表明浏览器记住这个站点的时间

所以 HstsOptions 指定了这些信息

注意 Preload 不是标准的一部分。

中间件处理的流程是这样

  1. 如果是非 Https 请求,则继续处理

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