两者都与 HTTPS 安全相关,但作用机制不同:
app.UseHttpsRedirection()
作用:HTTP 到 HTTPS 的即时重定向
-
当用户访问 http://example.com 时
-
服务器返回 307/308 重定向响应
-
浏览器自动跳转到 https://example.com
-
每次 HTTP 请求都会重定向
特点:
-
✅ 立即生效,无需浏览器记忆
-
❌ 首次请求仍是 HTTP(可能被拦截)
-
❌ 每次都需要一次额外的重定向请求
响应示例:
HTTP/1.1 308 Permanent Redirect
Location: https://example.com
app.UseHsts()
作用:HTTP 严格传输安全(HTTP Strict Transport Security)
-
首次访问(HTTPS)后,服务器返回特殊响应头
-
浏览器记住"这个网站只能用 HTTPS"
-
之后浏览器自动将所有 HTTP 请求改为 HTTPS
-
甚至在发送请求前就转换
特点:
-
✅ 浏览器端强制,无需服务器重定向
-
✅ 防止中间人攻击(用户无法绕过)
-
❌ 首次访问必须是 HTTPS 才能设置
-
❌ 设置后很难撤销(有过期时间)
响应头示例:
Strict-Transport-Security: max-age=31536000; includeSubDomains参数说明:
-
max-age=31536000:浏览器记住 1 年
-
includeSubDomains:所有子域名也强制 HTTPS
对比总结
特性 UseHttpsRedirection UseHsts 工作位置 服务器端重定向 浏览器端强制 首次访问 HTTP 可访问(重定向) 必须 HTTPS 后续访问 每次都重定向 浏览器自动转 HTTPS 性能 多一次请求 无额外请求 安全性 中等(首次可被劫持) 高(浏览器强制) 撤销难度 随时可撤销 需等待过期(max-age)