app.UseHsts()和app.UseExceptionHandler()有什么区别?

Or *_*raf 4 .net c# .net-core

在.NET Core应用程序的Startup.cs文件上,默认情况下,它使用

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }
Run Code Online (Sandbox Code Playgroud)

但是在某些情况下,我可以找到

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler();
        }
Run Code Online (Sandbox Code Playgroud)

有什么不同?

Ram*_*hat 24

这是一个古老的问题,但如果您仍然没有找到答案,那么这可能会有所帮助。

UseHsts 在响应中添加了一个 Strict-Transport-Security 标头。当使用 HTTPS 访问该站点时,浏览器会将其记录下来,并且将来使用 HTTP 的请求将被重定向到 HTTPS。因此,必须至少使用 HTTPS 访问该站点一次才能完成这项工作。

此外,Strict-Transport-Security 标头设置的到期时间已过,下次尝试通过 HTTP 加载站点将不会自动重定向到 HTTPS。

  • 如果我不使用 UseHsts 会发生什么? (2认同)
  • 使用 UseHsts 当浏览器进行 http 调用时,服务器会响应指令将页面重定向到安全的 https URL。这样浏览器可以在给定的时间内缓存此设置,浏览器将自动将 http 请求转换为 https。检查[这里]提出的类似问题(/sf/ask/2387576901/) (2认同)

Dan*_*ite 9

Hsts是强制使用SSL的安全功能。它与异常无关。

  • 不能保证仅将流量限制为 HTTPS,因此我认为不应该提及_强制 SSL_,这取决于客户端支持。它还需要至少 1 个成功的 HTTPS。 (4认同)
  • 它如何强制执行 SSL?我看不到任何变化。我的应用程序仍然在 http 中启动。 (3认同)

Meh*_*ani 5

这里是关于的附加信息UseHsts

HSTS 是一种客户端性能优化,可避免向服务器发出额外请求以获取更多信息,请阅读Ramesh的回答。但有一些限制:

  • 不能保证仅将流量限制为 HTTPS。
  • 它至少需要 1 个成功的 HTTPS 请求。
  • 这取决于客户端支持,客户端可能支持也可能不支持 HSTS

关于UseExceptionHandler,您可以使用此中间件全局捕获未处理的异常。


And*_*ndy 5

您应该知道,当您针对 localhost 运行时,您不会注意到此标头,因为 HSTS 中间件会忽略对 127.0.0.1 和本地主机的请求。

此外,此标头也仅通过 HTTPS 发送

请参阅此处的源代码:

  • 也许您希望能够在开发过程中混合使用 HTTP/HTTPS,并且浏览器不记得它应该仅使用 HTTPS。但正如我所说,它在 127.0.0.1 和 localhost 上被忽略。 (2认同)