我按照Microsoft Documentation上的说明配置UseHst,但是当我访问我的网站时,没有看到Strict-Transport-Security标头。我在配置上尝试了几种变体,但似乎没有任何影响。有什么想法我想念的吗?
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddHsts(options =>
{
});
services.AddHttpsRedirection(options =>
{
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHsts();
app.UseHttpsRedirection();
app.UseMvc();
}
这是我在Chrome中获得的标头的图片,但在其他所有浏览器中也是如此。
答案 0 :(得分:3)
UseHsts排除以下回送主机:
您可以尝试发布Web应用程序并检查标题 Strict-Transport-Security 。
以下是将网站发布到Azure的结果。
答案 1 :(得分:0)
我在ASP.NET Core 2.2应用程序中遇到了相同的问题。 Microsoft Documentation指出,无需在AddHsts()方法中显式设置Max-Age:
将Strict-Transport-Security标头的max-age参数明确设置为60天。如果未设置,则默认为30天。有关更多信息,请参见max-age指令。
但是,通过我自己进行设置,我设法将标头添加到了响应中。
在Startup.cs的 ConfigureServices()中:
if (!this.Environment.IsDevelopment())
{
var currentDate = DateTime.Now;
services.AddHsts(opt =>
{
opt.MaxAge = currentDate.AddYears(1) - currentDate;
opt.IncludeSubDomains = true;
});
}
在Startup.cs的 Configure()中:
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.ConfigureExceptionHandler(loggerFactory);
app.UseHsts();
}
注意:我已在我的web.config中明确添加的其他响应标头。
答案 2 :(得分:0)
这可能是相关的,但是我遇到了同样的问题,然后我以错误的顺序使用中间件。此配置启用了响应头:
app.UseForwardedHeaders();
app.UseHsts();
当然,services.AddHsts(...)
也很容易错过。
答案 3 :(得分:0)
遇到同样的问题,我从 HstsMiddleWare 测试代码中遇到了 snippet 并发现它很有用
如前面的答案所述,UseHsts 方法排除了环回主机,但您可以通过调用 ExcludedHosts 属性的 Clear 方法来清除此列表
services.AddHsts(options =>
{
options.ExcludedHosts.Clear();
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
});
注意:这是为了在本地测试 Hsts,但正如 Microsoft 官方文档中提到的,不建议在开发“because the HSTS settings are highly cacheable by browsers”中启用此功能