2017-05-29 13 views
0

私はHTTP/2を試しています。私はthis repoにいくつかの例を見つけました。それから私は、サーバーをstart()JettyのHTTP/2問題 - 無効な序文

public WebServer(String path, HttpServlet servlet, int port) { 
    Server server = new Server(new QueuedThreadPool()); 
    ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS); 
    context.addServlet(new ServletHolder(servlet), path); 
    ServerConnector connector = new ServerConnector(server, 1,1, new HTTP2ServerConnectionFactory(new HttpConfiguration())); 
    connector.setPort(port); 
    server.addConnector(connector); 
} 

、レポ上記とそれがエラーなしで接続されてから実行されるJava HTTP2クライアント:ここにコンストラクタは、(定型的なコードはスキップ)です。

# curl --http2 http://localhost:8080 
invalid_preface 

とブラウザ(クローム)は言う:しかし、私はカールと同じことをしよう

GET http://localhost:8080/ net::ERR_INVALID_HTTP_RESPONSE 

は、サーバとwhong何ですか?

答えて

2

サーバーに問題はありません。

あなたはHTTP/2のみ(HTTP/1.1)を聞くことが突堤を設定している、とあなたはそれを理解できないので、桟橋がinvalid_prefaceと答えたHTTP/1.1リクエストを、作るためにcurlとChromeを求めています。

curlは、HTTP/2 over TLS(SSL)のみを使用し、curlはクリアテキストのHTTP/2も使用できます。

This exampleには、クリアテキストHTTP/1.1とHTTP/2の両方をサポートするサーバーを設定する方法が示されています。

This exampleは、クリアテキストとTLS HTTP/1.1とHTTP/2の両方をサポートするサーバーを設定する方法を示しています。

curlをHTTP/2で使用する方法については、hereを参照してください。

+0

ブラウザの制限についての説明をありがとうございます。それでも、curlで '--http2'フラグを使うと、同じメッセージで失敗します。 – awfun

+0

'curl'は私のために失敗しません。おそらくあなたは 'curl'の古いバージョン、' openssl'の古いバージョンなどがあります。 'curl'バージョンがHTTP/2でうまく動作するようにする必要があります。まだエラーがある場合は、完全なサーバーを投稿してくださいログとクライアントログ。 – sbordet

関連する問題