§重新導向 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 篩選器
在此文件發現錯誤?此頁面的原始碼可在此處找到 here。在閱讀 文件指南 後,請隨時貢獻一個 pull request。有問題或建議要分享?前往 我們的社群論壇 與社群展開對話。