我有一个Sping Boot 服务器,我希望能够与无法或不愿意处理 permessage-deflate 压缩消息的WebSocket客户端进行通信。我从这两个类似的问题(下面的链接)中知道,我可以添加VM参数-Dorg.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS=true
来禁用Tomcat的默认deflate压缩。
- Tomcat JSR356 Websocket - disable permessage-deflate compression
- Spring disable websocket compression -> Sec-WebSocket-Extensions: permessage-deflate
然而,我计划做一个程序,它将被分发,以便其他人可以运行它,并且不得不强迫人们记住总是包括一个特定的VM参数,只是为了改变一个设置,这似乎是相当粗糙的。
有没有其他方法可以禁用Tomcat的WebSocket压缩,而不需要用户在运行时指定VM参数,也许可以使用Spring的Java配置或自定义WebSocket握手拦截器?
2条答案
按热度按时间lf5gs5x21#
您不仅可以使用JVM参数设置属性,还可以使用
System.setProperty
以编程方式设置属性,如下所示:如果您使用嵌入式tomcat将项目导出为JAR文件,则可以在执行
SpringApplication.run
之前在main
中运行它:如果您将应用程序打包到WAR文件中,您可以尝试以下操作:
gudnpqoy2#
在Tomcat 10.1中,
DISABLE_BUILTIN_EXTENSIONS
选项是removed,因此dan1st的答案不再有效。我设法通过使用过滤器从请求头中删除
permessage-deflate
来禁用压缩:在我的例子中,简单地清除头的值就足够了。但由于客户端可能会请求其他WebSocket扩展,因此最好从头文件中删除
permessage-deflate
。