Spring boot Spring引导:不发送HSTS头

Spring boot Spring引导:不发送HSTS头,spring-boot,xmlhttprequest,hsts,Spring Boot,Xmlhttprequest,Hsts,在开发环境中,我的浏览器Yandex将307选项请求重定向到URL的https版本,这是一个问题。由于我们没有设置SSL,因此请求失败,并且错误响应为preflight is invalid redirect。我通过配置HSTS标头解决了此问题,如下所示: @Configuration @EnableWebSecurity public class SecurityConfigurer extends WebSecurityConfigurerAdapter { ... @Ove

在开发环境中,我的浏览器Yandex将307选项请求重定向到URL的https版本,这是一个问题。由于我们没有设置SSL,因此请求失败,并且错误响应为preflight is invalid redirect。

我通过配置HSTS标头解决了此问题,如下所示:

@Configuration
@EnableWebSecurity
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
    ...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    ...
          http.headers().httpStrictTransportSecurity()
              .maxAgeInSeconds(0)
              .includeSubDomains(true);
    }
}

禁用HSTS对我无效。

我通过如下配置HSTS标头解决了此问题:

@Configuration
@EnableWebSecurity
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
    ...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    ...
          http.headers().httpStrictTransportSecurity()
              .maxAgeInSeconds(0)
              .includeSubDomains(true);
    }
}

禁用HST对我不起作用。

如果未设置HTTPS,则永远不应读取HSTS值-浏览器必须忽略通过未加密的HTTP连接发送的HST

如果您曾经有HTTPS,但现在不再有了,或者如果您的某些域/页面上有HTTPS,那么您的浏览器可能已经缓存了HSTS设置,无论浏览器上次读取标头时设置了什么最大年龄值。您需要在浏览器中清除此项。如何做到这一点因浏览器而异,但在所有浏览器中工作的一种更简单的方法是发布一个最大年龄为0的新HSTS头,就像您所做的那样,然后通过HTTPS而不是未加密的HTTP访问页面。这显然需要你有一个HTTPS设置,你说你没有?在所有浏览器都为所有受影响的域设置了新设置后,您可以完全停止发布该HSTS头


当浏览器缓存了以前的版本时,跳过重置步骤并仅关闭标题将不起作用-至少在浏览器的缓存版本在最长使用时间后过期之前是如此。

如果未设置HTTPS,则不应读取HSTS值-浏览器必须忽略通过未加密HTTP发送的HST连接

如果您曾经有HTTPS,但现在不再有了,或者如果您的某些域/页面上有HTTPS,那么您的浏览器可能已经缓存了HSTS设置,无论浏览器上次读取标头时设置了什么最大年龄值。您需要在浏览器中清除此项。如何做到这一点因浏览器而异,但在所有浏览器中工作的一种更简单的方法是发布一个最大年龄为0的新HSTS头,就像您所做的那样,然后通过HTTPS而不是未加密的HTTP访问页面。这显然需要你有一个HTTPS设置,你说你没有?在所有浏览器都为所有受影响的域设置了新设置后,您可以完全停止发布该HSTS头


如果浏览器缓存了以前的版本,则跳过重置步骤并仅关闭标题将不起作用-至少在浏览器的缓存版本在最长使用时间后过期之前是如此。

感谢您确认我的想法-不知何故,我的浏览器一定收到了HSTS标题。在Chrome中,它有助于删除缓存,但在Yandex中,我找不到同样的方法。正在删除上的子域chrome://net-internals/hsts 不适合我。浏览器是否在每个子域中缓存此设置?它在每个域中缓存此设置。您可以添加includesubdomain属性,如果您访问该顶级域并因此获得该策略,则该策略将应用于所有子域。但在该示例中,它仍然只存储在顶级域中,浏览器会检查完整域sub.sub.example.com,然后检查每个上层域,以查找缓存中的第一个匹配策略,例如,在本示例中,是sub.example.com,然后是example.com。注意:只有当客户访问其中一个域时,才会加载策略。浏览器不会主动访问这些域以查看是否存在HSTS策略。感谢您确认我的想法,我的浏览器一定收到了HSTS标头。在Chrome中,它有助于删除缓存,但在Yandex中,我找不到同样的方法。正在删除上的子域chrome://net-internals/hsts 不适合我。浏览器是否在每个子域中缓存此设置?它在每个域中缓存此设置。您可以添加includesubdomain属性,如果您访问该顶级域并因此获得该策略,则该策略将应用于所有子域。但在该示例中,它仍然只存储在顶级域中,浏览器会检查完整域sub.sub.example.com,然后检查每个上层域,以查找缓存中的第一个匹配策略,例如,在本示例中,是sub.example.com,然后是example.com。注意:只有当客户访问其中一个域时,才会加载策略。浏览器不会主动访问这些域以查看是否存在HSTS策略。这对我适用,但http.headers.httpStrictTransportSecurity.disable对我也适用。我使用的是Spring Boot 2.0.1.RELEASE,并验证了HSTS头不是使用Chrome 66 DevTools发送的。这对我来说是可行的,但是http.headers.httpStrictTransportSecurity.disable也对我有效。我使用的是Spring Boot 2.0.1.RELEASE,并验证了HSTS头不是使用Chrome 66 DevTools发送的。