如何在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
相关产品推荐
相关产品推荐

