Interesting, I wonder if you are hitting the response headers issues with
regards to HTTP/2.

See:
https://github.com/eclipse/jetty.project/issues/3956
and https://github.com/eclipse/jetty.project/issues/4115

Can you run curl again, but with HTTP/1.1?

$ curl --http1.1 --verbose ....

What kind of headers are you actually using?

Joakim Erdfelt / [email protected]


On Fri, Oct 4, 2019 at 4:04 PM Glen Peterson <[email protected]>
wrote:

> I changed the logging configuration from INFO to DEBUG and found this
> error when Jetty tries to serve the request:
>
> Sending HeadersFrame@676f5d6c#1{end=false}
> Appended HeadersFrame@676f5d6c#1{end=false}, entries=1
> Flushing HTTP2ServerSession@74a58163{l:/0:0:0:0:0:0:0:1:8443 <->
> r:/0:0:0:0:0:0:0:1:53320,sendWindow=15728640,recvWindow=1048576,streams=1,NOT_CLOSED,null}
> Processing HeadersFrame@676f5d6c#1{end=false}
> CtxTbl[3319f232] encoding
> encode IdxFieldS1:':status: 200' to '88'
> Failure generating HeadersFrame@676f5d6c#1{end=false}
>
> java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length
> 1
>
> at
> org.eclipse.jetty.http.PreEncodedHttpField.putTo(PreEncodedHttpField.java:118)
> at org.eclipse.jetty.http2.hpack.HpackEncoder.encode(HpackEncoder.java:316)
> at org.eclipse.jetty.http2.hpack.HpackEncoder.encode(HpackEncoder.java:204)
> at
> org.eclipse.jetty.http2.generator.HeadersGenerator.generateHeaders(HeadersGenerator.java:72)
> at
> org.eclipse.jetty.http2.generator.HeadersGenerator.generate(HeadersGenerator.java:56)
> at org.eclipse.jetty.http2.generator.Generator.control(Generator.java:80)
> at
> org.eclipse.jetty.http2.HTTP2Session$ControlEntry.generate(HTTP2Session.java:1250)
> at org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:187)
> at
> org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241)
> at
> org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223)
> at org.eclipse.jetty.http2.HTTP2Session.frame(HTTP2Session.java:757)
> at org.eclipse.jetty.http2.HTTP2Session.frames(HTTP2Session.java:727)
> at org.eclipse.jetty.http2.HTTP2Stream.headers(HTTP2Stream.java:112)
> at
> org.eclipse.jetty.http2.server.HttpTransportOverHTTP2.sendHeadersFrame(HttpTransportOverHTTP2.java:270)
> at
> org.eclipse.jetty.http2.server.HttpTransportOverHTTP2.send(HttpTransportOverHTTP2.java:142)
> at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:852)
> at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:929)
> at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:250)
> at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:226)
> at org.eclipse.jetty.server.HttpOutput.close(HttpOutput.java:308)
> at org.eclipse.jetty.server.HttpWriter.close(HttpWriter.java:47)
> at org.eclipse.jetty.server.ResponseWriter.close(ResponseWriter.java:161)
> at org.eclipse.jetty.server.Response.closeOutput(Response.java:844)
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:517)
> at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:314)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135)
> at
> org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:170)
> at
> org.eclipse.jetty.http2.server.HTTP2ServerConnection.onOpen(HTTP2ServerConnection.java:150)
> at org.eclipse.jetty.io.AbstractEndPoint.upgrade(AbstractEndPoint.java:442)
> at
> org.eclipse.jetty.server.NegotiatingServerConnection.onFillable(NegotiatingServerConnection.java:130)
> at
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> at
> org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:426)
> at
> org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:320)
> at
> org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:158)
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
> at
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
> at java.base/java.lang.Thread.run(Thread.java:834)
> Failing, entries processed/pending/queued=0/1/0
>
> I re-posted this version here:
> https://github.com/GlenKPeterson/classVsJar
>
> On Wed, Oct 2, 2019 at 5:40 PM Glen Peterson <[email protected]>
> wrote:
>
>> Yes Joakim.  I just made one and posted it here:
>> https://github.com/GlenKPeterson/classVsJar
>>
>> On Wed, Oct 2, 2019 at 2:43 PM Joakim Erdfelt <[email protected]> wrote:
>>
>>> Do you have a project that you can share that replicates this?
>>>
>>> Joakim Erdfelt / [email protected]
>>>
>>>
>>> On Wed, Oct 2, 2019 at 1:16 PM Glen Peterson <[email protected]>
>>> wrote:
>>>
>>>> P.S. I was able to get some interesting output from wget2 (successor to
>>>> wget).  It works fine running with the classes.  With the jar file, I get
>>>> the following which seems jetty-related:
>>>>
>>>> $ wget2 -d --no-check-certificate
>>>> https://dev.memoryjoggerlibrary.com:8443/
>>>> 02.140606.876 name=check-certificate value=
>>>> https://dev.memoryjoggerlibrary.com:8443/ invert=1
>>>> 02.140606.876 name=check-certificate value=
>>>> https://dev.memoryjoggerlibrary.com:8443/ invert=1
>>>> 02.140606.876 Local URI encoding = 'UTF-8'
>>>> 02.140606.876 Input URI encoding = 'UTF-8'
>>>> 02.140606.876 Fetched HSTS data from '/home/gpeterso/.wget-hsts'
>>>> 02.140606.876 Fetched HPKP data from '/home/gpeterso/.wget-hpkp'
>>>> 02.140606.877 add TLS session data for dev.memoryjoggerlibrary.com
>>>> (maxage=64800, size=1260)
>>>> 02.140606.877 Fetched TLS session data from
>>>> '/home/gpeterso/.wget-session'
>>>> 02.140606.877 Fetched OCSP hosts from '/home/gpeterso/.wget-ocsp_hosts'
>>>> 02.140606.877 Fetched OCSP fingerprints from '/home/gpeterso/.wget-ocsp'
>>>> 02.140606.877 *url = https://dev.memoryjoggerlibrary.com:8443/
>>>> 02.140606.877 *3 https://dev.memoryjoggerlibrary.com:8443/
>>>> 02.140606.877 local filename = 'index.html'
>>>> 02.140606.877 host_add_job: job fname index.html
>>>> 02.140606.877 host_add_job: 0x55b15a6bfb60
>>>> https://dev.memoryjoggerlibrary.com:8443/
>>>> 02.140606.877 host_add_job: qsize 1 host-qsize=1
>>>> 02.140606.877 queue_size: qsize=1
>>>> 02.140606.877 queue_size: qsize=1
>>>> 02.140606.877 queue_size: qsize=1
>>>> 02.140606.877 [0] action=1 pending=0 host=0x0
>>>> 02.140606.877 qsize=1 blocked=0
>>>> 02.140606.877 pause=-1570039566877
>>>> 02.140606.877 dequeue job https://dev.memoryjoggerlibrary.com:8443/
>>>> 02.140606.877 resolving dev.memoryjoggerlibrary.com:8443...
>>>> 02.140606.877 has 127.0.0.1:8443
>>>> 02.140606.877 Add dns cache entry dev.memoryjoggerlibrary.com
>>>> 02.140606.877 trying 127.0.0.1:8443...
>>>> 02.140606.877 GnuTLS init
>>>> 02.140606.877 Certificates loaded: -1
>>>> 02.140606.877 GnuTLS init done
>>>> 02.140606.877 TLS False Start requested
>>>> 02.140606.877 ALPN offering h2
>>>> 02.140606.877 ALPN offering http/1.1
>>>> 02.140606.877 found cached session data for dev.memoryjoggerlibrary.com
>>>> WARNING: The certificate is NOT trusted. The certificate issuer is
>>>> unknown.
>>>> 02.140606.885 TLS False Start: on
>>>> 02.140606.885 ALPN: Server accepted protocol 'h2'
>>>> 02.140606.885 Handshake completed
>>>> 02.140606.885 established connection dev.memoryjoggerlibrary.com
>>>> 02.140606.885 cookie_create_request_header for host=
>>>> dev.memoryjoggerlibrary.com path=
>>>> 02.140606.885 HTTP2 stream id 1
>>>> 02.140606.885 [0] action=1 pending=1 host=0x55b15a6bf9c0
>>>> 02.140606.885 qsize=1 blocked=0
>>>> 02.140606.885 pause=-1570039566885
>>>> 02.140606.885 [0] action=2 pending=1 host=0x55b15a6bf9c0
>>>> 02.140606.885   ##  pending_requests = 1
>>>> 02.140606.885   ##  loop responses=0
>>>> 02.140606.885 [FRAME 0] > SETTINGS
>>>> 02.140606.885 [FRAME 1] > HEADERS
>>>> 02.140606.885 [FRAME 1] > :method: GET
>>>> 02.140606.885 [FRAME 1] > :path: /
>>>> 02.140606.885 [FRAME 1] > :scheme: https
>>>> 02.140606.885 [FRAME 1] > :authority: dev.memoryjoggerlibrary.com
>>>> 02.140606.885 [FRAME 1] > accept-encoding: gzip, deflate, bzip2, xz,
>>>> lzma
>>>> 02.140606.885 [FRAME 1] > accept:
>>>> text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>>>> 02.140606.885 [FRAME 1] > user-agent: wget2/1.0.0
>>>> 02.140606.885   ##  loop responses=0
>>>> 02.140606.886 Got delayed session data
>>>> 02.140606.886 found TLS session data for dev.memoryjoggerlibrary.com
>>>> 02.140606.886 removed TLS session data for dev.memoryjoggerlibrary.com
>>>> 02.140606.886 add TLS session data for dev.memoryjoggerlibrary.com
>>>> (maxage=64800, size=1260)
>>>> 02.140606.886   ##  loop responses=0
>>>> 02.140606.886 [FRAME 0] < SETTINGS
>>>> 02.140606.886 [FRAME 0] < WINDOW_UPDATE
>>>> 02.140606.886   ##  loop responses=0
>>>> 02.140606.886 [FRAME 0] > SETTINGS
>>>> 02.140606.886   ##  loop responses=0
>>>> 02.140606.886 [FRAME 0] < SETTINGS
>>>> 02.140606.886   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>> 02.140608.260   ##  loop responses=0
>>>>
>>>> That scrolled really fast in a loop until I hit CTRL-C
>>>>
>>>> 02.140608.260 host_increase_failure: dev.memoryjoggerlibrary.com
>>>> failures=1
>>>> 02.140608.260 closing connection
>>>>
>>>> It just sat there doing nothing, so I hit CTRL-C again to exit
>>>>
>>>>
>>>> On Wed, Oct 2, 2019 at 1:43 PM Glen Peterson <[email protected]>
>>>> wrote:
>>>>
>>>>> Thank you for jetty.  I've been using it for a few years now and love
>>>>> it.  Especially that I can configure it programmatically (with Kotlin 
>>>>> code)
>>>>> and that you have updated the SSL/TLS protocol defaults over time.  Such 
>>>>> an
>>>>> improvement over Tomcat!
>>>>>
>>>>> *Problem*
>>>>> My problem may be jar-file/classpath related and not jetty related,
>>>>> but then why does jetty actually call my code, service the request, but 
>>>>> not
>>>>> return the response?
>>>>>
>>>>> I recently enabled HTTP/2 (Google wants that for a Progressive Web
>>>>> App).  Now if I run my app the way IntelliJ does, giving the compiled
>>>>> classes directory, then adding all the jar dependencies it works. `java
>>>>> -classpath classes/:bunch-of-jar-files... MainClassName` it works.  But if
>>>>> I run from the fat-jar file it doesn't work.
>>>>>
>>>>> *curl*
>>>>>
>>>>> *Jar File Failure:*
>>>>> $ curl --insecure https://dev.memoryjoggerlibrary.com:8443 -D
>>>>> headers.txt
>>>>> curl: (56) Unexpected EOF
>>>>> $ ls -s
>>>>> total 0
>>>>> 0 headers.txt
>>>>>
>>>>> *Class Files Success:*
>>>>> That same curl command returns the HTML file I was expecting when
>>>>> running with the massive classpath (no fat-jar), plus the following
>>>>> headers.txt:
>>>>> HTTP/2 200
>>>>> server: Jetty(9.4.20.v20190813)
>>>>> content-type: text/html;charset=utf-8
>>>>>
>>>>> I have determined that the jar files included by maven exactly match
>>>>> the jar files specified on the command line.
>>>>>
>>>>> *Chrome*
>>>>> With chrome, the class files work great, but the Jar file produces,
>>>>> "This site can’t be reached... unexpectedly closed the connection...
>>>>> ERR_CONNECTION_CLOSED"
>>>>>
>>>>> *Unaffected*
>>>>> *Log Files:*
>>>>> I can see in the log files in both cases that the request is being
>>>>> processed, but there is no exception thrown and no response apparently
>>>>> written.
>>>>>
>>>>> *Nmap Cipher Test:*
>>>>> Whether it yields HTML or not, the server gives the same response to
>>>>> my cipher test:
>>>>> $ nmap --script ssl-cert,ssl-enum-ciphers -p 8443
>>>>> dev.memoryjoggerlibrary.com
>>>>>
>>>>> Starting Nmap 7.60 ( https://nmap.org ) at 2019-10-02 13:32 EDT
>>>>> Nmap scan report for dev.memoryjoggerlibrary.com (127.0.0.1)
>>>>> Host is up (0.000053s latency).
>>>>> rDNS record for 127.0.0.1: localhost
>>>>>
>>>>> PORT     STATE SERVICE
>>>>> 8443/tcp open  https-alt
>>>>> | ssl-cert: Subject: commonName=
>>>>> dev.memoryjoggerlibrary.com/organizationName=PlanBase
>>>>> Inc./stateOrProvinceName=Massachusetts/countryName=US
>>>>> | Issuer: commonName=
>>>>> dev.memoryjoggerlibrary.com/organizationName=PlanBase
>>>>> Inc./stateOrProvinceName=Massachusetts/countryName=US
>>>>> | Public Key type: rsa
>>>>> | Public Key bits: 2048
>>>>> | Signature Algorithm: sha256WithRSAEncryption
>>>>> | Not valid before: 2019-09-25T20:57:00
>>>>> | Not valid after:  2022-09-25T20:57:00
>>>>> | MD5:   483e 988f 709f 7300 3f3d 1d51 4f95 81cb
>>>>> |_SHA-1: abe8 c872 c7d7 dfb1 4152 8bf3 2fee 5617 7613 94cd
>>>>> | ssl-enum-ciphers:
>>>>> |   TLSv1.2:
>>>>> |     ciphers:
>>>>> |       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
>>>>> |       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
>>>>> |       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (rsa 2048) - A
>>>>> |     compressors:
>>>>> |       NULL
>>>>> |     cipher preference: server
>>>>> |_  least strength: A
>>>>>
>>>>> Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
>>>>>
>>>>> *Details:*
>>>>> I'm using a self-signed certificate.
>>>>>
>>>>> Currently using (from maven .pom):
>>>>> <jetty.version>9.4.20.v20190813
>>>>> jetty-server
>>>>> jetty-alpn-conscrypt-server
>>>>> http2-common
>>>>> http2-hpack
>>>>> http2-server
>>>>>
>>>>> Not currently using: conscrypt-openjdk (seems to be overridden by the
>>>>> conscrypt-openjdk-uber included in jetty-alpn-conscrypt-server - same
>>>>> issues with or without this dependency)
>>>>>
>>>>>
>>>>> --
>>>>> Glen K. Peterson
>>>>> (828) 393-0081
>>>>>
>>>>
>>>>
>>>> --
>>>> Glen K. Peterson
>>>> (828) 393-0081
>>>> _______________________________________________
>>>> jetty-users mailing list
>>>> [email protected]
>>>> To change your delivery options, retrieve your password, or unsubscribe
>>>> from this list, visit
>>>> https://www.eclipse.org/mailman/listinfo/jetty-users
>>>
>>> _______________________________________________
>>> jetty-users mailing list
>>> [email protected]
>>> To change your delivery options, retrieve your password, or unsubscribe
>>> from this list, visit
>>> https://www.eclipse.org/mailman/listinfo/jetty-users
>>
>>
>>
>> --
>> Glen K. Peterson
>> (828) 393-0081
>>
>
>
> --
> Glen K. Peterson
> (828) 393-0081
> _______________________________________________
> jetty-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users

Reply via email to