You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.Net Core 6.0中正确实现HSTS头部?

ASP.NET Core 6.0 Web API 搞定HSTS与HTTPS自动重定向的正确姿势

问题根源排查

你当前的问题主要出在三个核心点:中间件注册顺序错误、未手动开启localhost的HSTS支持、可能未指定HTTPS重定向的目标端口,这几个疏漏导致了重定向失效和HSTS头部不出现。

正确配置步骤

1. Program.cs 完整配置代码

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务
builder.Services.AddControllers();

// 配置HTTPS重定向:指定目标端口(和launchSettings里的HTTPS端口一致,比如7075)
builder.Services.AddHttpsRedirection(options =>
{
    options.HttpsPort = 7075;
    // 308为永久重定向(适合生产环境),开发环境用307临时重定向也可
    options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;
});

// 配置HSTS:强制浏览器仅通过HTTPS访问
builder.Services.AddHsts(options =>
{
    options.MaxAge = TimeSpan.FromDays(365); // 浏览器缓存HSTS规则的时长
    options.IncludeSubDomains = true; // 所有子域名适用该规则
    options.Preload = true; // 支持HSTS预加载列表(可选,需提交至相关机构)
    options.IncludeLocalhost = true; // 开发环境下允许localhost返回HSTS头部(默认会跳过)
});

var app = builder.Build();

// 开发环境异常页面(按需保留)
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
}

// 重点!中间件顺序不能乱:先HSTS,再HTTPS重定向,最后路由、认证等
app.UseHsts();
app.UseHttpsRedirection();

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

2. launchSettings.json 双端口配置

确保applicationUrl同时包含HTTP和HTTPS端口,示例如下:

{
  "profiles": {
    "YourApiProjectName": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5075;https://localhost:7075",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

关键注意事项

  • 中间件顺序是核心:UseHsts和UseHttpsRedirection必须放在UseRouting、UseAuthentication之前,否则请求还未经过安全中间件处理就被路由接管,自然不会生效。
  • localhost的HSTS默认被禁用:ASP.NET Core为避免开发环境证书问题,默认不给localhost返回HSTS头部,需添加options.IncludeLocalhost = true才能在本地测试看到Strict-Transport-Security头,生产环境可移除该配置。
  • 端口必须完全匹配:AddHttpsRedirection里的HttpsPort要和launchSettings里的HTTPS端口一致,否则重定向会跳错地址。
  • 生产环境建议:上线前确保服务器有合法SSL证书,HSTS的MaxAge至少设置为30天,开启IncludeSubDomains;若需要让浏览器预加载你的HSTS规则,可提交至HSTS预加载列表(提交后不可轻易取消)。

内容的提问来源于stack exchange,提问作者One Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:57:14