From 26978d76a3d01143a73dd305d083d84cd8c657f0 Mon Sep 17 00:00:00 2001 From: yukang Date: Fri, 19 Jan 2024 08:44:15 +0800 Subject: [PATCH 1/2] Fix RPC cors issue of preflight request --- rpc/Cargo.toml | 2 +- rpc/src/server.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 92ddfa98b6..dec4dc6c78 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -45,7 +45,7 @@ async-trait = "0.1" axum = "0.6.20" tokio-util = { version = "0.7.3", features = ["codec"] } futures-util = { version = "0.3.21" } -tower-http = { version = "0.3.5", features = ["timeout"] } +tower-http = { version = "0.3.5", features = ["timeout", "cors"] } async-stream = "0.3.3" ckb-async-runtime = { path = "../util/runtime", version = "= 0.113.0" } diff --git a/rpc/src/server.rs b/rpc/src/server.rs index 08550d9730..c0c448a280 100644 --- a/rpc/src/server.rs +++ b/rpc/src/server.rs @@ -17,6 +17,7 @@ use std::sync::Arc; use std::time::Duration; use tokio::net::TcpListener; use tokio_util::codec::{FramedRead, FramedWrite, LinesCodec, LinesCodecError}; +use tower_http::cors::CorsLayer; use tower_http::timeout::TimeoutLayer; #[doc(hidden)] @@ -87,6 +88,8 @@ impl RpcServer { .with_channel_size(4) .with_pipeline_size(4); + let cors = CorsLayer::permissive(); + // HTTP and WS server. let method_router = post(handle_jsonrpc::>).get(handle_jsonrpc_ws::>); @@ -94,6 +97,7 @@ impl RpcServer { .route("/", method_router.clone()) .route("/*path", method_router) .layer(Extension(Arc::clone(rpc))) + .layer(cors) .layer(TimeoutLayer::new(Duration::from_secs(30))); if enable_websocket { From f733de8b00a4cab8b5c8dd43c853ed0c14a2fa8f Mon Sep 17 00:00:00 2001 From: yukang Date: Fri, 19 Jan 2024 08:51:07 +0800 Subject: [PATCH 2/2] add keep-alive for default http --- rpc/src/server.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rpc/src/server.rs b/rpc/src/server.rs index c0c448a280..6d943211d5 100644 --- a/rpc/src/server.rs +++ b/rpc/src/server.rs @@ -85,11 +85,10 @@ impl RpcServer { enable_websocket: bool, ) -> Result { let stream_config = StreamServerConfig::default() + .with_keep_alive(true) .with_channel_size(4) .with_pipeline_size(4); - let cors = CorsLayer::permissive(); - // HTTP and WS server. let method_router = post(handle_jsonrpc::>).get(handle_jsonrpc_ws::>); @@ -97,7 +96,7 @@ impl RpcServer { .route("/", method_router.clone()) .route("/*path", method_router) .layer(Extension(Arc::clone(rpc))) - .layer(cors) + .layer(CorsLayer::permissive()) .layer(TimeoutLayer::new(Duration::from_secs(30))); if enable_websocket {