diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index adbd0f2c..46953338 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -15,15 +15,15 @@ |spring.cloud.gateway.filter.remove-hop-by-hop.order | | |spring.cloud.gateway.filter.request-rate-limiter.deny-empty-key | true | Switch to deny requests if the Key Resolver returns an empty key, defaults to true. |spring.cloud.gateway.filter.request-rate-limiter.empty-key-status-code | | HttpStatus to return when denyEmptyKey is true, defaults to FORBIDDEN. -|spring.cloud.gateway.filter.secure-headers.content-security-policy | default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline' | -|spring.cloud.gateway.filter.secure-headers.content-type-options | nosniff | +|spring.cloud.gateway.filter.secure-headers.content-security-policy | default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline' | +|spring.cloud.gateway.filter.secure-headers.content-type-options | nosniff | |spring.cloud.gateway.filter.secure-headers.disable | | -|spring.cloud.gateway.filter.secure-headers.download-options | noopen | -|spring.cloud.gateway.filter.secure-headers.frame-options | DENY | -|spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies | none | -|spring.cloud.gateway.filter.secure-headers.referrer-policy | no-referrer | -|spring.cloud.gateway.filter.secure-headers.strict-transport-security | max-age=631138519 | -|spring.cloud.gateway.filter.secure-headers.xss-protection-header | 1 ; mode=block | +|spring.cloud.gateway.filter.secure-headers.download-options | noopen | +|spring.cloud.gateway.filter.secure-headers.frame-options | DENY | +|spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies | none | +|spring.cloud.gateway.filter.secure-headers.referrer-policy | no-referrer | +|spring.cloud.gateway.filter.secure-headers.strict-transport-security | max-age=631138519 | +|spring.cloud.gateway.filter.secure-headers.xss-protection-header | 1 ; mode=block | |spring.cloud.gateway.forwarded.enabled | true | Enables the ForwardedHeadersFilter. |spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping | false | If global CORS config should be added to the URL handler. |spring.cloud.gateway.globalcors.cors-configurations | | @@ -43,12 +43,12 @@ |spring.cloud.gateway.httpclient.proxy.username | | Username for proxy configuration of Netty HttpClient. |spring.cloud.gateway.httpclient.response-timeout | | The response timeout. |spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout | 3000ms | SSL close_notify flush timeout. Default to 3000 ms. -|spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout-millis | | +|spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout-millis | | |spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout | | SSL close_notify read timeout. Default to 0 ms. -|spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout-millis | | +|spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout-millis | | |spring.cloud.gateway.httpclient.ssl.default-configuration-type | | The default ssl configuration type. Defaults to TCP. |spring.cloud.gateway.httpclient.ssl.handshake-timeout | 10000ms | SSL handshake timeout. Default to 10000 ms -|spring.cloud.gateway.httpclient.ssl.handshake-timeout-millis | | +|spring.cloud.gateway.httpclient.ssl.handshake-timeout-millis | | |spring.cloud.gateway.httpclient.ssl.key-password | | Key password, default is same as keyStorePassword. |spring.cloud.gateway.httpclient.ssl.key-store | | Keystore path for Netty HttpClient. |spring.cloud.gateway.httpclient.ssl.key-store-password | | Keystore password. @@ -58,9 +58,10 @@ |spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager | false | Installs the netty InsecureTrustManagerFactory. This is insecure and not suitable for production. |spring.cloud.gateway.httpclient.websocket.max-frame-payload-length | | Max frame payload length. |spring.cloud.gateway.httpclient.websocket.proxy-ping | true | Proxy ping frames to downstream services, defaults to true. +|spring.cloud.gateway.httpclient.compression | `false` | Enables compression support for Netty HttpClient. |spring.cloud.gateway.httpclient.wiretap | false | Enables wiretap debugging for Netty HttpClient. |spring.cloud.gateway.httpserver.wiretap | false | Enables wiretap debugging for Netty HttpServer. -|spring.cloud.gateway.loadbalancer.use404 | false | +|spring.cloud.gateway.loadbalancer.use404 | false | |spring.cloud.gateway.metrics.enabled | true | Enables the collection of metrics data. |spring.cloud.gateway.metrics.tags | | Tags map that added to metrics. |spring.cloud.gateway.redis-rate-limiter.burst-capacity-header | X-RateLimit-Burst-Capacity | The name of the header that returns the burst capacity configuration. diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index 03c06830..47a7cf38 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -166,6 +166,7 @@ import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool /** * @author Spencer Gibb * @author Ziemowit Stolarczyk + * @author Mete Alpaslan Katırcıoğlu */ @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @@ -761,6 +762,10 @@ public class GatewayAutoConfiguration { httpClient = httpClient.wiretap(true); } + if (properties.isCompression()) { + httpClient = httpClient.compress(true); + } + if (!CollectionUtils.isEmpty(customizers)) { customizers.sort(AnnotationAwareOrderComparator.INSTANCE); for (HttpClientCustomizer customizer : customizers) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java index d1879348..a42b2a75 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java @@ -78,6 +78,9 @@ public class HttpClientProperties { /** Enables wiretap debugging for Netty HttpClient. */ private boolean wiretap; + /** Enables compression for Netty HttpClient. */ + private boolean compression; + public Integer getConnectTimeout() { return connectTimeout; } @@ -152,6 +155,14 @@ public class HttpClientProperties { this.wiretap = wiretap; } + public boolean isCompression() { + return compression; + } + + public void setCompression(boolean compression) { + this.compression = compression; + } + @Override public String toString() { // @formatter:off @@ -165,6 +176,7 @@ public class HttpClientProperties { .append("ssl", ssl) .append("websocket", websocket) .append("wiretap", wiretap) + .append("compression", compression) .toString(); // @formatter:on diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java index 975d00ba..1df5fa09 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java @@ -92,6 +92,7 @@ public class GatewayAutoConfigurationTests { "spring.cloud.gateway.httpclient.connect-timeout=10", "spring.cloud.gateway.httpclient.response-timeout=10s", "spring.cloud.gateway.httpclient.pool.type=fixed", + "spring.cloud.gateway.httpclient.compression=true", // greather than integer max value "spring.cloud.gateway.httpclient.max-initial-line-length=2147483647", "spring.cloud.gateway.httpclient.proxy.host=myhost", @@ -103,6 +104,7 @@ public class GatewayAutoConfigurationTests { .getBean(HttpClientProperties.class); assertThat(properties.getMaxInitialLineLength().toBytes()) .isLessThanOrEqualTo(Integer.MAX_VALUE); + assertThat(properties.isCompression()).isEqualTo(true); /* * FIXME: 2.1.0 HttpClientOptions options = httpClient.options(); *