文档

§重定向 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.ForwardedHeaderHandlerplay.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:9000app2: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 过滤器


发现此文档中的错误?此页面的源代码可以在 此处 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。