webentwicklung-frage-antwort-db.com.de

Tomcat mit aktivierter Komprimierung verursacht Fehler unter OS X High Sierra

Wir verwenden Tomcat (v7) seit geraumer Zeit unter OS X und hatten nie Probleme. Nach der Aktualisierung des Betriebssystems auf High Sierra funktionieren die Webanwendungen jedoch nicht mehr, wenn die Komprimierung in der server.xml aktiviert ist.

Chrome zeigt ständig ERR_CONTENT_DECODING_FAILED (offensichtlich ohne Anzeige von Inhalten). Wenn die Komprimierung ausgeschaltet ist, funktioniert alles einwandfrei. Ich gehe davon aus, dass die Wurzel des Problems das Upgrade von zlib in High Sierra von Apple ist. In Sierra funktionierte alles gut. Die Tomcat-Protokolldateien sehen einwandfrei aus - Fehler werden dort nicht erwähnt.

Tritt jemand das gleiche Problem auf und hat es geschafft, es zu beheben, oder kennt es eine praktikable Problemumgehung ohne die Komprimierung zu deaktivieren

Es wäre auch hilfreich, wenn jemand bestätigen kann, dass neuere Tomcat-Versionen dieses Problem in High Sierra nicht aufweisen.

Danke für Ihre Hilfe.

13
Emulov

Dies ist ein Fehler in der Implementierung der Java SDK-Methode setLevel(). Es wird berichtet, dass komprimierte Daten, die sich aus der Einstellung des Pegels ergeben, vom SDK verworfen werden. Dies führt zu beschädigten komprimierten Daten. Das Update für den Fehler findet sich here , geschrieben von xuemingshen.

7
Mark Adler

Problemumgehung, bis ein tatsächlicher Fix gefunden wird: Deaktivieren Sie die Komprimierung in der server.xml-Konfiguration Ihres Tomcat-Projekts.

4
cedric

Workarround/Hack für Windows: Leider bin ich mit OS X nicht vertraut, aber ich bin mit dem gleichen Problem unter Windows konfrontiert und konnte ein wenig schmutzige Lösung dafür finden. Der Fehler deflate.c wurde in 8u162-ea behoben. Siehe https://bugs.openjdk.Java.net/browse/JDK-8189789

Leider enthält 8u162-ea möglicherweise nicht alle Fixes oder ist wahrscheinlich nicht gut genug für eine Produktionsumgebung.

Um es unter 8u152 zu beheben, laden Sie das neueste Update von http://jdk.Java.net/8/ herunter und installieren Sie es.

Gehen Sie in das Installationsverzeichnis (zum Beispiel C:\Java\jdk8-162-ea\jre\bin\) und kopieren Sie den Zip.dll, der den Fix enthält (siehe JDK 9 deflate.c fix ), und fügen Sie ihn an derselben Stelle unter dem jdk 8u152 ein.

Ich hoffe, Sie finden etwas Ähnliches unter OS X.

2
PF.

Fyi, Benutzer von OS X, ich habe versucht, JDK 8u162-ea von http://jdk.Java.net/8/ zu installieren, und das Problem wurde nicht behoben. Ich denke, der Grund dafür ist, dass das OS X-JDK im Gegensatz zum Windows-JDK nicht zlib bündelt, sondern die in OS X enthaltene Zlib verwendet (/usr/lib/libz.1.dylib). Dies kann durch Betrachten der gemeinsam genutzten Bibliotheken gesehen werden, von denen die Java-Programmdatei abhängt:

$ 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)

Ich denke, wir brauchen ein Update für dieses Problem von Apple in Form eines - Updates für High Sierra.

0
ips

Unsere Problemumgehung für local dev: Wir verwenden Spring Boot und verfügen über einen EmbeddedServletContainerCustomizer. Nach dem Update auf High Sierra, dasselbe Problem. Das Problem besteht nur für die lokale Entwicklung, also nicht zur Push-Produktion. Wie oben erwähnt, haben wir die Komprimierung in unserer MainConfiguration wie folgt deaktiviert: 

    @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);
                        }
                    });
        };
    };
}
0
ssoward