§重定向 HTTPS 过滤器
Play 提供了一个过滤器,它会自动将所有 HTTP 请求重定向到 HTTPS。
§启用 HTTPS 过滤器
要启用过滤器,请将其添加到 play.filters.enabled
中
play.filters.enabled += play.filters.https.RedirectHttpsFilter
默认情况下,重定向仅在 Prod 模式下发生。要覆盖此设置,请设置 play.filters.https.redirectEnabled = true
。
§确定安全请求
如果 request.secure
为 true,则过滤器会将请求评估为安全请求。
此逻辑取决于为 Play 的 HTTP 引擎配置的 受信任的代理。在内部,play.core.server.common.ForwardedHeaderHandler
和 play.api.mvc.request.RemoteConnection
共同确定传入请求是否符合“安全”标准,这意味着请求在某个时间点已通过 HTTPS。
启用过滤器后,任何不安全的请求都会被重定向。
§严格传输安全
严格传输安全 标头用于指示何时应始终使用 HTTPS,并添加到安全请求中。仅当启用重定向时才会添加 HSTS 标头。
默认值为“max-age=31536000; includeSubDomains”,可以通过将以下内容添加到 application.conf
中来显式设置
play.filters.https.strictTransportSecurity="max-age=31536000; includeSubDomains"
也可以设置 play.filters.https.strictTransportSecurity = null
来禁用 HSTS。
请注意,Strict-Transport-Security
标头告诉浏览器优先使用 HTTPS 进行对该主机名的所有请求,因此,如果您在开发模式下启用过滤器,则该标头将影响使用该主机名开发的其他应用程序(例如 localhost:9000
)。如果您想避免这种情况,请在开发模式下为每个应用程序使用不同的主机(app1:9000
、app2:9000
等),或者完全禁用 HSTS。
§重定向代码
过滤器使用 HTTP 代码 308 重定向,根据 RFC 7238,这是一个永久重定向,不会更改 HTTP 方法。这将适用于绝大多数浏览器,但如果使用旧版浏览器,您可以更改重定向代码。
play.filters.https.redirectStatusCode = 301
§自定义 HTTPS 端口
如果 HTTPS 服务器位于自定义端口上,则重定向 URL 需要知道它。如果指定了端口
play.filters.https.port = 9443
那么 Location
标头中的 URL 将包含该端口,例如 https://playframework.com:9443/some/url
。
§X-Forwarded-Proto 标头
可以仅在 x-forwarded-proto
标头设置为 http
时进行重定向,这可以通过在 application.conf
中添加以下内容来启用
play.filters.https.xForwardedProtoEnabled = true
下一步:配置 IP 过滤器
发现此文档中的错误?此页面的源代码可以在 此处 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。