Enable compression support via configuration

Fixes gh-361
Fixes gh-2146
This commit is contained in:
Mete Alpaslan Katırcıoğlu
2021-02-14 13:20:45 +03:00
committed by spencergibb
parent df5e032bc9
commit 15db93cca9
4 changed files with 32 additions and 12 deletions

View File

@@ -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.

View File

@@ -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) {

View File

@@ -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

View File

@@ -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();
*