私はJetty 9.3.9.M1組み込みサーバーとhttp/2を使用し、Apache Wicketと共にPushBuilder APIを使用してリソースをクライアント。Jettyは、http2を使用しているときに304の代わりにステータス200を返します。
私は、次のサーバーのセットアップに使用:
状況:今、私はこのようなリソースへのHTTP/1.1リクエストを行うという問題に直面しています
Server server = new Server();
// HTTP Configuration
HttpConfiguration http_config = new HttpConfiguration();
http_config.setSecureScheme("https");
http_config.setSecurePort(8443);
http_config.setSendXPoweredBy(true);
http_config.setSendServerVersion(true);
// keytool -keystore keystore -alias jetty -genkey -keyalg RSA
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(new File(".","keystore").getCanonicalPath());
sslContextFactory.setKeyStorePassword("123456789");
sslContextFactory.setKeyManagerPassword("123456789");
sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR);
sslContextFactory.setUseCipherSuitesOrder(true);
// HTTPS Configuration
HttpConfiguration https_config = new HttpConfiguration(http_config);
https_config.addCustomizer(new SecureRequestCustomizer());
// HTTP Connector
ServerConnector http1 = new ServerConnector(server, new HttpConnectionFactory(http_config),
new HTTP2CServerConnectionFactory(http_config));
http1.setPort(8080);
server.addConnector(http1);
// HTTP/2 Connection Factory
HTTP2ServerConnectionFactory http2 = new HTTP2ServerConnectionFactory(https_config);
NegotiatingServerConnectionFactory.checkProtocolNegotiationAvailable();
ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
alpn.setDefaultProtocol(http1.getDefaultProtocol());
// SSL Connection Factory
SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol());
// HTTP/2 Connector
ServerConnector http2Connector = new ServerConnector(server, ssl, alpn, http2,
new HttpConnectionFactory(https_config));
http2Connector.setPort(8443);
server.addConnector(http2Connector);
WebAppContext webAppContext = new WebAppContext();
webAppContext.setServer(server);
webAppContext.setContextPath("/");
webAppContext.setWar("src/main/webapp");
server.setHandler(webAppContext);
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.addHandler(webAppContext);
server.setHandler(contexts);
ALPN.debug = false;
server.start();
server.join();
をコード304は、2回目のリクエスト後にクロムデバッガに表示されます
同じリソースへのhttp/2.0リクエストを行う場合:
ステータスコード200は、各要求に示されている - クライアントがそれをキャッシュしないようです。 https://github.com/klopfdreh/jetty-http2-example
よろしくと感謝事前に多く:ここ
はgitのプロジェクトへのリンクです。
HTTPSと1.1で試してください。 –
http/1.1でHTTPSを使用すると、期待どおりに動作しています。 2回目の要求の後に、リソースがキャッシュされ、304がステータスコードとして出力されます。私はSslConnectionFactoryのコンストラクタを変更し、http1.getDefaultProtocolを2番目の引数として渡しました。 – klopfdreh
あなたは 'css'を押すか、ブラウザを使って直接要求していますか? – sbordet