# HTTP

所有基于 HTTP 的通信，包括[静态资源](https://www.troyhunt.com/heres-why-your-static-website-needs-https/)，都应该受到[using TLS](https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Protection_Cheat_Sheet.html)的保护。

作为一个框架， Spring 安全性不处理 HTTP 连接，因此不直接提供对 HTTPS 的支持。然而，它确实提供了许多有助于 HTTPS 使用的功能。

## 重定向到 HTTPS

当客户端使用 HTTP 时， Spring 安全性可以被配置为将[Servlet](../../servlet/exploits/http.html#servlet-http-redirect)和[WebFlux](../../reactive/exploits/http.html#webflux-http-redirect)环境重定向到 HTTPS。

## 严格的运输安全

Spring 安全性为[严格的运输安全](headers.html#headers-hsts)提供支持，并在默认情况下启用它。

## 代理服务器配置

在使用代理服务器时，重要的是要确保你已经正确地配置了应用程序。例如，许多应用程序将有一个负载均衡器，该负载均衡器通过在[https://192.168.1:8080](https://192.168.1:8080)处将请求转发到应用程序服务器来响应[https://example.com/](https://example.com/)的请求。如果没有适当的配置，应用程序服务器将不知道负载均衡器的存在，并将请求视为[https://192.168.1:8080](https://192.168.1:8080)是由客户机请求的。

要解决这个问题，你可以使用[RFC 7239](https://tools.ietf.org/html/rfc7239)来指定正在使用负载均衡器。要使应用程序意识到这一点，你需要配置你的应用程序服务器来了解 X 转发头。例如， Tomcat 使用[Remoteipvalve](https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html)， Jetty 使用[ForwardeDrequestCustomizer](https://www.eclipse.org/jetty/javadoc/jetty-9/org/eclipse/jetty/server/ForwardedRequestCustomizer.html)。或者， Spring 用户可以利用[ForwardedHeaderFilter](https://github.com/spring-projects/spring-framework/blob/v4.3.3.RELEASE/spring-web/src/main/java/org/springframework/web/filter/ForwardedHeaderFilter.java)。

Spring 引导用户可以使用`server.use-forward-headers`属性来配置应用程序。有关更多详细信息，请参见[Spring Boot documentation](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-use-tomcat-behind-a-proxy-server)。