Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启用压缩的Tomcat在OS X High上导致错误_Java_Macos_Tomcat_Compression_Zlib - Fatal编程技术网

Java 启用压缩的Tomcat在OS X High上导致错误

Java 启用压缩的Tomcat在OS X High上导致错误,java,macos,tomcat,compression,zlib,Java,Macos,Tomcat,Compression,Zlib,我们在OSX上使用Tomcat(v7)已经有一段时间了,从未遇到过任何问题。但是,在将操作系统更新为High Sierra之后,如果在server.xml中启用了压缩,则web应用程序将不再工作 Chrome不断显示错误内容解码失败(显然没有任何内容显示)。关闭压缩后,一切正常。我认为问题的根源在于苹果在High Sierra升级了zlib。塞拉的一切都很顺利。Tomcat日志文件看起来完美无缺——这里没有提到任何错误 是否有人遇到过同样的问题并设法解决了它,或者知道一种可行的解决方法而不禁用压

我们在OSX上使用Tomcat(v7)已经有一段时间了,从未遇到过任何问题。但是,在将操作系统更新为High Sierra之后,如果在server.xml中启用了压缩,则web应用程序将不再工作

Chrome不断显示错误内容解码失败(显然没有任何内容显示)。关闭压缩后,一切正常。我认为问题的根源在于苹果在High Sierra升级了zlib。塞拉的一切都很顺利。Tomcat日志文件看起来完美无缺——这里没有提到任何错误

是否有人遇到过同样的问题并设法解决了它,或者知道一种可行的解决方法而不禁用压缩

另外,如果有人能确认Tomcat的新版本在高性能上没有遇到这个问题,这也会很有帮助


感谢您的帮助。

在找到实际修复方法之前的变通方法:关闭tomcat项目的
server.xml
配置中的压缩。

这是Java SDK
setLevel()
方法实现中的一个错误。据报道,SDK丢弃了设置级别所产生的压缩数据。这将导致压缩数据损坏。该漏洞的修复程序可以找到,由薛明申编写。

Workaround/Hack for Windows:不幸的是,我不熟悉OS X,但我在Windows上也面临同样的问题,并且能够找到一个有点脏的解决方案。已在
8u162 ea
中修复了deflate.c错误,请参阅

不幸的是,
8u162 ea
可能不包含所有修复程序,或者对于生产环境来说可能不够好

要在
8u152
下修复它,请从下载并安装最新更新

转到安装文件夹(例如
C:\Java\jdk8-162-ea\jre\bin\
),复制包含修复程序的
zip.dll
(请参阅),并将其粘贴到
jdk 8u152
下的同一位置


我希望你能在OS X下找到类似的东西。

仅供参考,OS X用户,我尝试从安装JDK 8u162 ea,但它没有解决问题。我认为原因是,与WindowsJDK不同,OSXJDK不捆绑zlib,而是使用OSX附带的zlib(/usr/lib/libz.1.dylib)。通过查看java可执行文件所依赖的共享库可以看出这一点:

$ otool -L /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java:
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
    /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55179.0.2)
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 45.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.1.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.11.0)
因此,我认为我们需要苹果公司以一种
High Sierra的更新。

我们针对本地开发人员的解决方案:我们使用spring boot,并有一个嵌入式ServletContainerCustomizer。更新至High Sierra后,同一问题。这个问题只存在于当地的发展中,因此不能推动生产。如上所述,我们在主配置中关闭了压缩,如下所示:

    @Bean
    public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainerFactory servletContainer) {
            ((TomcatEmbeddedServletContainerFactory) servletContainer).addConnectorCustomizers(
                    new TomcatConnectorCustomizer() {
                        @Override
                        public void customize(Connector connector) {
                            AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
                            httpProtocol.setCompression("off");
                            httpProtocol.setCompressionMinSize(256);
                            String mimeTypes = httpProtocol.getCompressableMimeTypes();
                            mimeTypes += "," + MediaType.APPLICATION_JSON_VALUE;
                            mimeTypes += "," + "text/css";
                            mimeTypes += "," + "application/javascript";
                            httpProtocol.setCompressableMimeTypes(mimeTypes);
                        }
                    });
        };
    };
}

谢谢,但如果你仔细阅读我的问题,它说我正在寻找一个不禁用压缩的修复/解决方案。我找不到解决方案。必须关闭server.xml中的压缩。请发布您找到的任何解决方案。如果gzip在终端上停止工作,则会出现其他问题。用自制安装的gzip v1.8(/usr/local/ceral/gzip/1.8)替换/sw/bin/gzip解决了这个问题。对我来说,Tomcat的压缩问题仅限于js和css文件。Html仍在呈现中。如果错误在JDK中,为什么它在以前版本的OS X中工作?我仍然认为这是一个与zlib相关的bug,因为苹果在High Sierra进行了重大升级。。。在任何情况下:哪些版本的JDK会受到您所说的bug的影响?据我所知,它会影响所有版本的JDK,直到修复程序实现为止。zlib在其规范内改变了其行为,暴露了JDK中的错误。JDK不能正确处理来自zlib函数的返回代码,丢弃了该函数可能返回的数据,现在在这个应用程序中,该函数确实返回了这些数据。这不是zlib中的bug。谢谢,我现在明白了,你写的东西很有意义。我真的希望JDK bug很快得到修复。在那之前,我想我必须关闭Tomcat服务器上的压缩。这似乎是JDK的潜在缺陷:如果您转到并在页面上找到“zlib”,您将看到,即使是最新的Oracle JDK 8也尚未对此进行修复(从1.8u152开始)。我想说的是,请继续关注该文档,寻找一个已经修复的版本。不,JDK需要修复。如果这个bug在JDK中被修复,那么它将在High Sierra中与zlib一起工作。但是,他说JDK bug是在JDK 8u151中引入的,但我在JDK 8u144中遇到了这个问题。我是在升级到High Sierra之后开始体验的,而不是在升级我的JDK之后。据我所知,JDK中的bug从一开始就存在。正是zlib的新版本激发了这个bug。