rust 如何在axum中使用HTTP/2

nlejzf6q  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(331)

我想在axum中使用HTPP/2,但我无法访问它,无论是用浏览器还是用httpie。我已经检查了axumhyper的文档,由于我的英语和编程技能很差,我没有在网上找到任何信息,我希望在这里得到一些帮助

// src/main.rs
#[tokio::main]
async fn main() {
    let app = axum::Router::new().route("/", axum::routing::get(|| async {"Hello, World!"}));
    let addr = std::net::SocketAddr::from(([127,0,0,1], 8080));
    let _server = axum::Server::bind(&addr).serve(app.into_make_service()).await.unwrap();
}
# Cargo.toml
[dependencies.axum]
version = "0.6"
default-features = false
features = ["http2", "tokio", "matched-path"]
C:\Users\user>http :8080

http: error: ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002843AB5D670>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')) while doing a GET request to URL: http://localhost:8080/

http1http2都启用时,访问正常,但默认使用http1,当启用http2_only(true)时,它不工作。

34gzjxbg

34gzjxbg1#

正如this discussion on GitHub所暗示的那样,许多客户端将使用HTTP 1执行初始请求,但使用Upgrade标头来传达他们升级到HTTP 2的愿望。不支持HTTP 2的服务器将简单地忽略标头,数据交换将使用HTTP 1进行。但支持HTTP 2的服务器将使用101 Switching Protocols响应进行回复,然后客户端和服务器将继续使用HTTP 2。
如果服务器中没有包含HTTP 1支持,则无法使用此升级机制,客户端 * 必须 * 使用HTTP 2发出初始请求。但是,这与HTTP 1服务器向后不兼容,所以除非使用某种设置或标志显式地请求,否则通常不会这样做。我们将使用它来查看它是否有一个可以用来使用HTTP2发出初始请求的设置。

相关问题