我想在axum
中使用HTPP/2
,但我无法访问它,无论是用浏览器还是用httpie。我已经检查了axum
和hyper
的文档,由于我的英语和编程技能很差,我没有在网上找到任何信息,我希望在这里得到一些帮助
// 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/
当http1
和http2
都启用时,访问正常,但默认使用http1
,当启用http2_only(true)
时,它不工作。
1条答案
按热度按时间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发出初始请求的设置。