diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index f1ad11b6..e902e07c 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -41,16 +41,16 @@ |spring.cloud.gateway.filter.rewrite-path.enabled | `true` | Enables the rewrite-path filter. |spring.cloud.gateway.filter.rewrite-response-header.enabled | `true` | Enables the rewrite-response-header filter. |spring.cloud.gateway.filter.save-session.enabled | `true` | Enables the save-session filter. -|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.download-options | `noopen` | |spring.cloud.gateway.filter.secure-headers.enabled | `true` | Enables the secure-headers filter. -|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.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.set-path.enabled | `true` | Enables the set-path filter. |spring.cloud.gateway.filter.set-request-header.enabled | `true` | Enables the set-request-header filter. |spring.cloud.gateway.filter.set-request-host-header.enabled | `true` | Enables the set-request-host-header filter. @@ -98,9 +98,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 | `false` | Enables the collection of metrics data. |spring.cloud.gateway.metrics.prefix | `spring.cloud.gateway` | The prefix of all metrics emitted by gateway. |spring.cloud.gateway.metrics.tags | | Tags map that added to metrics. 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 e338588a..9c327874 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 @@ -170,6 +170,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) @@ -739,6 +740,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 57b1c2f9..13c98509 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 @@ -77,6 +77,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; } @@ -151,6 +154,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 @@ -164,6 +175,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 d2a61979..49b15ab9 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 @@ -95,6 +95,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", @@ -104,6 +105,7 @@ public class GatewayAutoConfigurationTests { HttpClient httpClient = context.getBean(HttpClient.class); HttpClientProperties properties = context.getBean(HttpClientProperties.class); assertThat(properties.getMaxInitialLineLength().toBytes()).isLessThanOrEqualTo(Integer.MAX_VALUE); + assertThat(properties.isCompression()).isEqualTo(true); /* * FIXME: 2.1.0 HttpClientOptions options = httpClient.options(); *