diff --git a/CHANGES.md b/CHANGES.md index c98ff842f..1d73093b4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,8 @@ # Changes -## 0.4.9 (2018-03-xx) +## 0.4.9 (2018-03-16) + +* Allow to disable http/2 support * Wake payload reading task when data is available diff --git a/src/server/srv.rs b/src/server/srv.rs index 5d181c51e..836c6395e 100644 --- a/src/server/srv.rs +++ b/src/server/srv.rs @@ -41,6 +41,7 @@ pub struct HttpServer where H: IntoHttpHandler + 'static exit: bool, shutdown_timeout: u16, signals: Option>, + no_http2: bool, no_signals: bool, } @@ -89,6 +90,7 @@ impl HttpServer where H: IntoHttpHandler + 'static exit: false, shutdown_timeout: 30, signals: None, + no_http2: false, no_signals: false, } } @@ -170,6 +172,12 @@ impl HttpServer where H: IntoHttpHandler + 'static self } + /// Disable `HTTP/2` support + pub fn no_http2(mut self) -> Self { + self.no_http2 = true; + self + } + /// Get addresses of bound sockets. pub fn addrs(&self) -> Vec { self.sockets.iter().map(|s| s.0).collect() @@ -396,15 +404,17 @@ impl HttpServer Err(io::Error::new(io::ErrorKind::Other, "No socket addresses are bound")) } else { // alpn support - builder.set_alpn_protos(b"\x02h2\x08http/1.1")?; - builder.set_alpn_select_callback(|_, protos| { - const H2: &[u8] = b"\x02h2"; - if protos.windows(3).any(|window| window == H2) { - Ok(b"h2") - } else { - Err(AlpnError::NOACK) - } - }); + if !self.no_http2 { + builder.set_alpn_protos(b"\x02h2\x08http/1.1")?; + builder.set_alpn_select_callback(|_, protos| { + const H2: &[u8] = b"\x02h2"; + if protos.windows(3).any(|window| window == H2) { + Ok(b"h2") + } else { + Err(AlpnError::NOACK) + } + }); + } let (tx, rx) = mpsc::unbounded(); let acceptor = builder.build(); diff --git a/src/server/worker.rs b/src/server/worker.rs index 02fa7453c..a8ca3b2ac 100644 --- a/src/server/worker.rs +++ b/src/server/worker.rs @@ -204,7 +204,8 @@ impl StreamHandlerType { } else { false }; - Arbiter::handle().spawn(HttpChannel::new(h, io, peer, http2)); + Arbiter::handle().spawn( + HttpChannel::new(h, io, peer, http2)); }, Err(err) => trace!("Error during handling tls connection: {}", err), diff --git a/src/test.rs b/src/test.rs index 7173f9c32..041ceaab8 100644 --- a/src/test.rs +++ b/src/test.rs @@ -87,9 +87,12 @@ impl TestServer { let sys = System::new("actix-test-server"); let tcp = net::TcpListener::bind("127.0.0.1:0").unwrap(); let local_addr = tcp.local_addr().unwrap(); - let tcp = TcpListener::from_listener(tcp, &local_addr, Arbiter::handle()).unwrap(); + let tcp = TcpListener::from_listener( + tcp, &local_addr, Arbiter::handle()).unwrap(); - HttpServer::new(factory).disable_signals().start_incoming(tcp.incoming(), false); + HttpServer::new(factory) + .disable_signals() + .start_incoming(tcp.incoming(), false); tx.send((Arbiter::system(), local_addr)).unwrap(); let _ = sys.run(); diff --git a/tests/test_server.rs b/tests/test_server.rs index cf682468a..9cc09d029 100644 --- a/tests/test_server.rs +++ b/tests/test_server.rs @@ -743,7 +743,7 @@ fn test_h2() { }) }); let _res = core.run(tcp); - // assert_eq!(_res.unwrap(), Bytes::from_static(STR.as_ref())); + // assert_eq!(res.unwrap(), Bytes::from_static(STR.as_ref())); } #[test]