跳转到内容

HTTPS 强制与 HSTS

httpsEnforce 中间件自动将 HTTP 请求 301 重定向到 HTTPS,并为 HTTPS 响应附加 Strict-Transport-Security (HSTS) 头,防止协议降级攻击。

import { httpsEnforce } from "@ventostack/core";
app.use(httpsEnforce());

默认行为:

  • HTTP 请求 → 301 重定向到 HTTPS
  • HTTPS 响应 → 附加 Strict-Transport-Security: max-age=31536000; includeSubDomains
选项类型默认值说明
hstsbooleantrue是否启用 HSTS 头
maxAgenumber31536000HSTS max-age(秒),默认 1 年
includeSubDomainsbooleantrueHSTS 是否包含子域
preloadbooleanfalse是否添加 preload 标记
proxyHeaderstring"x-forwarded-proto"用于判断协议的代理头
excludePathsstring[][]排除的路径(如健康检查)

完整类型定义:

interface HTTPSOptions {
hsts?: boolean;
maxAge?: number;
includeSubDomains?: boolean;
preload?: boolean;
proxyHeader?: string;
excludePaths?: string[];
}
function httpsEnforce(options?: HTTPSOptions): Middleware;

健康检查等路径可以跳过 HTTPS 强制:

app.use(
httpsEnforce({
excludePaths: ["/health", "/ready"],
}),
);
  • 通过 proxyHeader(默认 x-forwarded-proto)判断是否为 HTTPS,部署在反向代理后时需确保代理正确设置此头
  • HSTS 的 preload 需要配合域名提交到浏览器 HSTS Preload List 才能生效
  • 排除路径使用精确匹配