On Tue, Sep 10, 2019 at 11:32 PM Simone Bordet <[email protected]> wrote:

> Hi,
>
> On Tue, Sep 10, 2019 at 2:05 PM John Jiang <[email protected]>
> wrote:
> > I would have tried that with curl, like the below,
> > $ curl -v --http2 http://localhost:9020/push
> > *   Trying ::1:9020...
> > * TCP_NODELAY set
> > * Connected to localhost (::1) port 9020 (#0)
> > > GET /push HTTP/1.1
> > > Host: localhost:9020
> > > User-Agent: curl/7.65.3
> > > Accept: */*
> > > Connection: Upgrade, HTTP2-Settings
> > > Upgrade: h2c
> > > HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
> > >
> > * Mark bundle as not supporting multiuse
> > < HTTP/1.1 101 Switching Protocols
> > * Received 101
> > * Using HTTP2, server supports multi-use
> > * Connection state changed (HTTP/2 confirmed)
> > * Copying HTTP/2 data in stream buffer to connection buffer after
> upgrade: len=0
> > * Connection state changed (MAX_CONCURRENT_STREAMS == 1024)!
> > < HTTP/2 500
> > < cache-control: must-revalidate,no-cache,no-store
> > < content-type: text/html;charset=iso-8859-1
> > <
> > <html>
> > <head>
> > <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
> > <title>Error 500 Server Error</title>
> > </head>
> > <body><h2>HTTP ERROR 500</h2>
> > <p>Problem accessing /push. Reason:
> > <pre>    Server Error</pre></p><h3>Caused
> by:</h3><pre>java.lang.NullPointerException
> > at httptest.ServerPushServlet.doGet(Unknown Source)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
> > at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:844)
> > at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
> > ...
> >
> > I think they talked HTTP/2.
> > And I suppose this issue may not related to HTTP/2. If used HTTP/1.1,
> that Request still was null.
>
> The SETTINGS frame sent during the upgrade is:
>
> HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
>
> when decoded, it yields this map:
>
> {
> max_concurrent_streams: 100,
> initial_window_size: 32768,
> enable_push: 0
> }
>
> So cURL does not support pushes, so it disables them in the upgrade
> SETTINGS frame.
>
> Yes, curl tool doesn't support server push yet, even though libcurl
supports that.
But as I mentioned in my last reply, this failure may not be related to
server push or HTTP/2.
That servlet didn't get the instance of org.eclipse.jetty.server.Request.
It didn't touch org.eclipse.jetty.server.PushBuilder yet.

For clarification, please consider the below simple servlet,
package test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;

public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 5222793251610509039L;

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse
response)
            throws ServletException, IOException {
        if(Request.getBaseRequest(request) == null) {
            throw new RuntimeException(
                    "Cannot get org.eclipse.jetty.server.Request instance");
        }
    }
}

and the curl output as the below,
$ curl -v --http1.1 http://localhost:9020/test
*   Trying ::1:9020...
* TCP_NODELAY set
* Connected to localhost (::1) port 9020 (#0)
> GET /test HTTP/1.1
> Host: localhost:9020
> User-Agent: curl/7.65.3
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 500 Server Error
< Cache-Control: must-revalidate,no-cache,no-store
< Content-Type: text/html;charset=iso-8859-1
< Content-Length: 3096
< Connection: close
< Server: Jetty(9.4.20.v20190813)
<
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /test. Reason:
<pre>    Server Error</pre></p><h3>Caused
by:</h3><pre>java.lang.RuntimeException: Cannot get
org.eclipse.jetty.server.Request instance
at test.TestServlet.doGet(TestServlet.java:20)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:844)
...

The dependencies, like jetty-server-9.4.20.v20190813.jar, are in the web
application, say test.war/WEB-INF/lib.
Should I enable some modules for this case?
The enabled modules in my base are the followings,
Enabled Modules:
================
    0) alpn-impl/alpn-1.8.0_221 transitive provider of
alpn-impl/alpn-1.8.0_221 for alpn-impl/alpn-8
                       dynamic dependency of alpn-impl/alpn-8
    1) alpn-impl/alpn-8 transitive provider of alpn-impl/alpn-8 for
alpn-impl
                       dynamic dependency of alpn-impl
    2) alpn-impl       transitive provider of alpn-impl for alpn
    3) bytebufferpool  transitive provider of bytebufferpool for server
                       init template available with
--add-to-start=bytebufferpool
    4) ext             ${jetty.base}/start.ini
    5) resources       ${jetty.base}/start.ini
    6) threadpool      transitive provider of threadpool for server
                       init template available with
--add-to-start=threadpool
    7) server          ${jetty.base}/start.ini
                       ${jetty.base}/start.d/server.ini
    8) ssl             ${jetty.base}/start.d/ssl.ini
    9) alpn            ${jetty.base}/start.d/alpn.ini
   10) mail            transitive provider of mail for jndi
   11) jndi            ${jetty.base}/start.ini
   12) security        transitive provider of security for webapp
                       transitive provider of security for plus
   13) transactions    transitive provider of transactions for plus
   14) servlet         transitive provider of servlet for webapp
                       transitive provider of servlet for servlets
   15) webapp          transitive provider of webapp for plus
                       transitive provider of webapp for deploy
                       init template available with --add-to-start=webapp
   16) plus            transitive provider of plus for annotations
   17) annotations     ${jetty.base}/start.ini
   18) client          ${jetty.base}/start.ini
   19) continuation    ${jetty.base}/start.ini
   20) deploy          ${jetty.base}/start.ini
                       ${jetty.base}/start.d/deploy.ini
   21) http            ${jetty.base}/start.d/http.ini
   22) http2           ${jetty.base}/start.d/http2.ini
   23) http2c          ${jetty.base}/start.d/http2c.ini
   24) https           ${jetty.base}/start.d/https.ini
   25) servlets        ${jetty.base}/start.ini
   26) websocket       ${jetty.base}/start.ini
                       ${jetty.base}/start.d/websocket.ini
_______________________________________________
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