使用Safari错误在Websockets和Tomcat上使用Spring强制SSL

时间:2019-07-09 17:07:39

标签: spring tomcat websocket safari

我们有一个在Tomcat 8.5上使用Websockets和Spring的应用程序

我们发现使用这种东西组合会遇到问题

  • 使用context.xml中的<security-constraint>在tomcat中强制SSL连接
  • 使用spring 4.2.6 +
  • 从Safari浏览。

我们遇到的问题是这个。

WebSocket - Safari 9 - Invalid UTF-8 sequence in header value

基本上,Safari会向其发送一个空的Expires标头。之所以为空是由于SPR-14053,它引入了在配置缓存时重置Expires Header的功能。

https://github.com/spring-projects/spring-framework/issues/18625

正在发生的是在Tomcat中使用并且未禁用ProxyCaching,Tomcat设置和Expires Header的情况

https://github.com/apache/tomcat/blob/8.5.x/java/org/apache/catalina/authenticator/AuthenticatorBase.java#L508

我相信,因为Header之前是由Tomcat设置的,因此没有从响应中删除Expire标头,而是将其简单地设置为空白,这会导致Safari出现问题。

我知道我可以解决此问题,我的问题是,此问题的解决方法应该在哪里?是否应将此文件提交到Safari,Spring或Tomcat的错误列表中?

1 个答案:

答案 0 :(得分:0)

哦,我刚刚意识到,在Safari之外,他们将其行为修复为空标题。最好将以下内容添加到context.xml

<Valve className="org.apache.catalina.authenticator.SSLAuthenticator" disableProxyCaching="false"/>

并允许Spring正常设置缓存属性。而不是让Tomcat和Spring都在为使用哪种缓存标头而战。