Hi,
I have an issue using http client communicating with servers that most
probably are on GCP (I see header: "via: 1.1 google").

I get "java.io.IOException: Received RST_STREAM: Protocol error".
I quick search revealed that there were two bugs reported in JDK for that,
with the most recent (https://bugs.openjdk.java.net/browse/JDK-8218546)
should have fixed the issue in JDK 12.

But I'm on JDK 16 (build 16+35-2229) and I get this error when connecting
to a website when I use the header "TE: Trailers"  (needs first letter
capitalized).

When I remove this header everything works, if I switch to HTTP 1.1 (with
that header) it also works.

Here is a minimal reproducible example:

HttpClient.newBuilder()
  .build()
  .send(
    HttpRequest.newBuilder()
    .header("TE", "Trailers")
    .uri(URI.create("https://pacjent.erejestracja.ezdrowie.gov.pl";))
    .GET()
    .build(),
    HttpResponse.BodyHandlers.ofString()
  );

I got that header from the browser (I tried to use the same request in Java
as Firefox does) and was surprised that it works in browser (Firefox 90) as
well as in curl (7.74.0) but fails in Java.

Not sure if that is a quirk of Google servers or java bug, so I'm reporting
here.


Below is full stacktrace:

 java.io.IOException: Received RST_STREAM: Protocol error
at jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:568)
~[java.net.http:?]
at jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
~[java.net.http:?]
at com.kirela.szczepimy.Main.webSearch(Main.java:525) ~[classes/:?]
at com.kirela.szczepimy.Main.main(Main.java:423) [classes/:?]
Caused by: java.io.IOException: Received RST_STREAM: Protocol error
at jdk.internal.net.http.Stream.handleReset(Stream.java:537)
~[java.net.http:?]
at jdk.internal.net.http.Stream.schedule(Stream.java:184) ~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224)
~[java.net.http:?]
at jdk.internal.net.http.Stream.receiveResetFrame(Stream.java:345)
~[java.net.http:?]
at jdk.internal.net.http.Stream.incoming_reset(Stream.java:515)
~[java.net.http:?]
at jdk.internal.net.http.Stream.otherFrame(Stream.java:455)
~[java.net.http:?]
at jdk.internal.net.http.Stream.incoming(Stream.java:448) ~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection.processFrame(Http2Connection.java:810)
~[java.net.http:?]
at jdk.internal.net.http.frame.FramesDecoder.decode(FramesDecoder.java:155)
~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:232)
~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection.asyncReceive(Http2Connection.java:672)
~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.processQueue(Http2Connection.java:1305)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224)
~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.runOrSchedule(Http2Connection.java:1323)
~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1349)
~[java.net.http:?]
at
jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1283)
~[java.net.http:?]
at
jdk.internal.net.http.common.SSLTube$DelegateWrapper.onNext(SSLTube.java:210)
~[java.net.http:?]
at
jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:492)
~[java.net.http:?]
at
jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:295)
~[java.net.http:?]
at
jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run1(SubscriberWrapper.java:316)
~[java.net.http:?]
at
jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run(SubscriberWrapper.java:259)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224)
~[java.net.http:?]
at
jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:232)
~[java.net.http:?]
at
jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:198)
~[java.net.http:?]
at
jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:444)
~[java.net.http:?]
at
jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:268)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147)
~[java.net.http:?]
at
jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
~[java.net.http:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
~[?:?]
at java.lang.Thread.run(Thread.java:831) ~[?:?]


Regards,
-- 
Krzysztof Krason

Reply via email to