Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.IllegalArgumentException: Invalid character '[' for QUERY_PARAM in "match[]" #462

Closed
wangzw opened this issue Aug 1, 2018 · 18 comments
Labels
Milestone

Comments

@wangzw
Copy link
Contributor

wangzw commented Aug 1, 2018

2018-08-01 08:21:20.226 ERROR 1 --- [-server-epoll-7] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://xxx.com/grafana/api/datasources/proxy/1/api/v1/series?match[]=jvm_classes_loaded%7Binstance%3D%22config%3A8888%22%7D&start=1533108081&end=1533111681]

java.lang.IllegalArgumentException: Invalid character '[' for QUERY_PARAM in "match[]"
	at org.springframework.web.util.HierarchicalUriComponents.verifyUriComponent(HierarchicalUriComponents.java:417) ~[spring-web-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
	at org.springframework.web.util.HierarchicalUriComponents.lambda$verify$4(HierarchicalUriComponents.java:383) ~[spring-web-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
	at java.util.Map.forEach(Map.java:630) ~[na:1.8.0_111]
	at org.springframework.web.util.HierarchicalUriComponents.verify(HierarchicalUriComponents.java:382) ~[spring-web-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
	at org.springframework.web.util.HierarchicalUriComponents.<init>(HierarchicalUriComponents.java:152) ~[spring-web-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
	at org.springframework.web.util.UriComponentsBuilder.build(UriComponentsBuilder.java:394) ~[spring-web-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
	at org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.filter(RouteToRequestUrlFilter.java:73) ~[spring-cloud-gateway-core-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]
	at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:133) ~[spring-cloud-gateway-core-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]
	at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) ~[spring-cloud-gateway-core-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]
	at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:115) ~[spring-cloud-gateway-core-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]

Use gateway to forward grafana request get above error.

Seems the request http://xxx.com/grafana/api/datasources/proxy/1/api/v1/series?match[]=jvm_classes_loaded%7Binstance%3D%22config%3A8888%22%7D&start=1533108081&end=1533111681 not encoded well. But not sure if it is a gateway issue.

@spencergibb
Copy link
Member

some things are encoded, others are not, is there a reason why?

@wangzw
Copy link
Contributor Author

wangzw commented Aug 1, 2018

I reviewed the URL again and found that it is encoded like this intentionally. The value of parameter match[] is complicated and encoded and the rest of URL is not encoded.

In ServerWebExchangeUtils, the whole URL is treated as encoded if % is found in any position of raw query string.

	public static boolean containsEncodedParts(URI uri) {
		boolean encoded = (uri.getRawQuery() != null && uri.getRawQuery().contains("%"))
				|| (uri.getPath() != null && uri.getRawPath().contains("%"));
		return encoded;
	}

Maybe this case should be handled more specifically.

@spencergibb
Copy link
Member

I'm open to suggestions. Springs url handling expects all encoded or not at all

@wangzw
Copy link
Contributor Author

wangzw commented Aug 2, 2018

I'm wondering that why a gateway check url so strictly? And any idea to fix this issue?

@StarF666
Copy link

StarF666 commented Aug 2, 2018

I had a similar problem accessing a Typo3 backend through the gateway and made a filter fixing the encoding. It's not throroughly tested and though not pretty it seemed to work. I'm not using this in production and it's written in Kotlin but you might wanna have a look:

    class Typo3BackendFixFilter : GatewayFilter {

    private val log = LoggerFactory.getLogger(this.javaClass)

    override fun filter(exchange: ServerWebExchange, chain: GatewayFilterChain): Mono<Void> {
        val req = exchange.request
        ServerWebExchangeUtils.addOriginalRequestUrl(exchange, req.uri)
        val uriComponents = UriComponentsBuilder.fromUri(req.uri).build()
        val newQueryParamsMap = HashMap<String, MutableList<String>>()
        uriComponents.queryParams.forEach { mapEntry ->
            val newKey = if (mapEntry.key.contains("%")) mapEntry.key else URLEncoder.encode(mapEntry.key, "UTF-8")
            val newValue = mapEntry.value.map { listEntry ->
                listEntry?.let {
                    if (listEntry.contains("%")) {
                        listEntry
                    } else {
                        URLEncoder.encode(listEntry, "UTF-8")
                    }
                } ?: ""
            }.filterNot { it.isEmpty() }.toMutableList()
            newQueryParamsMap[newKey] = newValue
        }
        val newURI = UriComponentsBuilder.newInstance()
                .scheme(uriComponents.scheme)
                .host(uriComponents.host)
                .port(uriComponents.port).also { builder -> uriComponents.path?.let { builder.path(it) } }
                .queryParams(CollectionUtils.toMultiValueMap(newQueryParamsMap))
                .fragment(uriComponents.fragment)
                .build(true).toUri()


        val request = req.mutate()
                .uri(newURI)
                .build()

        exchange.attributes[ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR] = request.uri

        return chain.filter(exchange.mutate().request(request).build())
    }

}

@bcelenk
Copy link

bcelenk commented Aug 2, 2018

Hi,
I've come across with the same problem, where Spring's URL handling can handle the request but gateway fails with an exception.

Example URI:
http://localhost:8080/test?key=test=%20key

Gateway Scenario:

Caused by: java.lang.IllegalArgumentException: Invalid character '=' for QUERY_PARAM in "test=%20key"
	at org.springframework.web.util.HierarchicalUriComponents.verifyUriComponent(HierarchicalUriComponents.java:417)
	at org.springframework.web.util.HierarchicalUriComponents.lambda$verify$4(HierarchicalUriComponents.java:385)
	at java.util.Map.forEach(Map.java:630)
	at org.springframework.web.util.HierarchicalUriComponents.verify(HierarchicalUriComponents.java:382)
	at org.springframework.web.util.HierarchicalUriComponents.<init>(HierarchicalUriComponents.java:152)
	at org.springframework.web.util.UriComponentsBuilder.build(UriComponentsBuilder.java:394)
	at org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.filter(RouteToRequestUrlFilter.java:73)
	at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:133)
	at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44)
	at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:115)
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:45)
	... 153 more

WebFlux raw controller scenario:

   @GetMapping("/test")
    @ResponseStatus(HttpStatus.OK)
    public Mono<String> ping(ServerWebExchange exchange){
        System.out.println(exchange.getRequest().getQueryParams());
        return Mono.just("works");
    }

results with
{key=[test= key]}

In summary, raw controller handles the partial encoding by the order of "="s. However, RouteToRequestUrlFilter passes the query params to HierarchicalUriComponents as encoded because of '%' in the sample URI. Since, HierarchicalUriComponents expects fully encoded parameters
this.encodeState = encoded ? EncodeState.FULLY_ENCODED : EncodeState.RAW;
It fails.

I think gateway should support these kind of cases to provide compatibility with Webflux, and this could happen in many situations.

For example, chrome encodes the uri http://localhost:8080/test?key=test= key as http://localhost:8080/test?key=test=%20key

@wangzw
Copy link
Contributor Author

wangzw commented Aug 3, 2018

I have filed a pull request to handle this case. The basic idea is to treat partial encoded URI as uncoded URI.

There are two cases which I can image to cause partial encoded URI.

  1. URI.quote() encoded some characters like space in the test case.
  2. One encoded some query parameter before sending like the case which I reported.

Case 1) will be handled by java well.
Case 2) will be handled by the destination server well.

So just treat partial encoded URI as uncoded. And this patch works for me well.

Web server application is out of my domain and correct me if I have made mistake.

@SteveOnorato
Copy link

Ran into this issue trying to use Spring Cloud Gateway in front of JupyterLab. The JupyterLab UI makes a request with '=' in a query parameter value:

2018-08-17 16:46:02.085 ERROR 23572 --- [server-epoll-12] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://redacted.hostname.com:8080/steve1/jupyter/static/components/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full,Safe&delayStartupUntil=configured%22%20charset=%22utf-8%22]

java.lang.IllegalArgumentException: Invalid character '=' for QUERY_PARAM in "configured%22%20charset=%22utf-8%22"
        at org.springframework.web.util.HierarchicalUriComponents.verifyUriComponent(HierarchicalUriComponents.java:417) ~[spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        ...

Would be awesome if the gateway would pass such requests along, since most other components don't seem to be bothered by this.

@fuvidani
Copy link

I have the same issue, just like described above. In my case the query params always contain an URL with "=" in it. The target service alone can handle these requests without any problem, the gateway unfortunately not. It'd be nice, if you could push a fix for that or provide an official workaround. :)

@wangzw
Copy link
Contributor Author

wangzw commented Sep 1, 2018

#467 to fix this issue, and this patch works well for me.

@umorsu
Copy link

umorsu commented Sep 26, 2018

Any update on getting this issue addressed? We have same issue on our project where our client urls are not fully encoded! they have "=" in query param values

@wangzw
Copy link
Contributor Author

wangzw commented Oct 6, 2018

@spencergibb Any comments?

@bcelenk
Copy link

bcelenk commented Oct 26, 2018

@spencergibb Would you please consider fixing this behaviour which causes inconsistencies between the gateway and the webflux ecosystem?

@ferdinand-beyer
Copy link

I've also encountered this issue and like to add a different perspective: The exception being thrown leads to a HTTP 500 Internal Server Error. In my opinion, a user should not be able to trigger a 500 error by typing an invalid URL into the address bar. I'd expect no error or a HTTP 4xx (i.e. 400 Bad Request) instead.

@bcelenk
Copy link

bcelenk commented Jan 23, 2019

@ferdinand-beyer I think that it shouldn't throw any errors at all since WebFlux is perfectly fine with these requests.

@spencergibb spencergibb added this to the 2.1.1.RELEASE milestone Jan 28, 2019
ryanjbaxter added a commit that referenced this issue Feb 28, 2019
Handle partial encoded URI. #462
@gvart
Copy link

gvart commented Mar 11, 2019

I'v upgraded Spring-Cloud-Gateway to 2.1.1.RELEASE but issue still preset.

I'm using Gateway as a proxy for Grafana, where request look like http://localhost:8080/grafana/

Configuration:

spring:
  cloud:
    gateway:
      routes:
      - id: grafana
        uri: http://grafana:3000
        predicates:
        - Path=/grafana/**
        filters:
        - RewritePath=/grafana/(?<segment>.*), /$\{segment}

Request: /grafana/api/datasources/proxy/4/api/v1/series?match[]=jvm_memory_used_bytes%7Binstance%3D%22auth-service%3A8100%22%2C%20area%3D%22heap%22%7D&start=1551943090&end=1551967148

Stacktrace:

 java.lang.IllegalArgumentException: Invalid character '[' for QUERY_PARAM in "match[]"
         at org.springframework.web.util.HierarchicalUriComponents.verifyUriComponent(HierarchicalUriComponents.java:409)
         at org.springframework.web.util.HierarchicalUriComponents.lambda$verify$4(HierarchicalUriComponents.java:375)
         at java.base/java.util.Map.forEach(Map.java:661)
         at org.springframework.web.util.HierarchicalUriComponents.verify(HierarchicalUriComponents.java:374)
         at org.springframework.web.util.HierarchicalUriComponents.<init>(HierarchicalUriComponents.java:144)
         at org.springframework.web.util.UriComponentsBuilder.buildInternal(UriComponentsBuilder.java:400)
         at org.springframework.web.util.UriComponentsBuilder.build(UriComponentsBuilder.java:388)
         at org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.filter(RouteToRequestUrlFilter.java:82)
         at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:135)
         at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44)
         at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:117)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.Mono.subscribe(Mono.java:3694)
         at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
         at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.Mono.subscribe(Mono.java:3694)
         at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
         at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
         at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
         at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
         at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275)
         at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849)
         at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
         at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
         at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
         at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144)
         at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
         at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275)
         at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849)
         at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
         at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:192)
         at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
         at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:140)
         at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2070)
         at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onSubscribe(MonoFilterWhen.java:103)
         at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
         at reactor.core.publisher.MonoFilterWhen.subscribe(MonoFilterWhen.java:56)
         at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71)
         at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
         at reactor.core.publisher.Mono.subscribe(Mono.java:3694)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:244)
         at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:114)
         at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:42)
         at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
         at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
         at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.request(FluxDematerialize.java:157)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:229)
         at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onSubscribe(FluxDematerialize.java:88)
         at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
         at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
         at reactor.core.publisher.FluxDematerialize.subscribe(FluxDematerialize.java:39)
         at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
         at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
         at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
         at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
         at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
         at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
         at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
         at reactor.core.publisher.Mono.subscribe(Mono.java:3694)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442)
         at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212)
         at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
         at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
         at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
         at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
         at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
         at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
         at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
         at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1505)
         at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:247)
         at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:329)
         at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2070)
         at reactor.core.publisher.MonoZip$ZipInner.onSubscribe(MonoZip.java:318)
         at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
         at reactor.core.publisher.Mono.subscribe(Mono.java:3694)
         at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128)
         at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
         at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
         at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
         at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
         at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
         at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
         at reactor.core.publisher.Mono.subscribe(Mono.java:3694)
         at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
         at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
         at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70)
         at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
         at reactor.netty.http.server.HttpServerHandle.onStateChange(HttpServerHandle.java:64)
         at reactor.netty.tcp.TcpServerBind$ChildObserver.onStateChange(TcpServerBind.java:234)
         at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:436)
         at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:141)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
         at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:162)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
         at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438)
         at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)
         at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297)
         at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
         at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
         at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
         at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
         at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)
         at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)
         at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:427)
         at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:328)
         at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905)
         at java.base/java.lang.Thread.run(Thread.java:834)

@ryanjbaxter
Copy link
Contributor

Can you please open a separate issue?

@gvart
Copy link

gvart commented Mar 13, 2019

@ryanjbaxter yes of course

Johnny850807 pushed a commit to Johnny850807/spring-cloud-gateway that referenced this issue Dec 14, 2020
Johnny850807 pushed a commit to Johnny850807/spring-cloud-gateway that referenced this issue Dec 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests