Merge pull request #137 from chaosprint/support_dev_server_shared_array_buffer

set headers to support sab on dev server
This commit is contained in:
YuKun Liu authored and GitHub committed 2023-05-04 23:24:21 -07:00
commit cabec80ac5
3 files changed
+481 -256

No files matched your search

Generated
+440 -253
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -41,7 +41,7 @@ indicatif = "0.17.0-rc.11"
subprocess = "0.2.9" subprocess = "0.2.9"
axum = { version = "0.5.1", features = ["ws", "headers"] } axum = { version = "0.5.1", features = ["ws", "headers"] }
tower-http = { version = "0.2.2", features = ["fs", "trace"] } tower-http = { version = "0.2.2", features = ["full" ] }
headers = "0.3.7" headers = "0.3.7"
walkdir = "2" walkdir = "2"
+40 -2
View File
@@ -2,7 +2,10 @@ use crate::{builder, plugin::PluginManager, serve::Serve, BuildResult, CrateConf
use axum::{ use axum::{
body::{Full, HttpBody}, body::{Full, HttpBody},
extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade}, extract::{ws::Message, Extension, TypedHeader, WebSocketUpgrade},
http::{Response, StatusCode}, http::{
header::{HeaderName, HeaderValue},
Method, Response, StatusCode,
},
response::IntoResponse, response::IntoResponse,
routing::{get, get_service}, routing::{get, get_service},
Router, Router,
@@ -22,7 +25,10 @@ use std::{
use tokio::sync::broadcast; use tokio::sync::broadcast;
use tower::ServiceBuilder; use tower::ServiceBuilder;
use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody}; use tower_http::services::fs::{ServeDir, ServeFileSystemResponseBody};
use tower_http::{
cors::{Any, CorsLayer},
ServiceBuilderExt,
};
mod proxy; mod proxy;
pub struct BuildManager { pub struct BuildManager {
@@ -170,6 +176,13 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig, star
.clone() .clone()
.unwrap_or_else(|| vec![PathBuf::from("src")]); .unwrap_or_else(|| vec![PathBuf::from("src")]);
let cors = CorsLayer::new()
// allow `GET` and `POST` when accessing the resource
.allow_methods([Method::GET, Method::POST])
// allow requests from any origin
.allow_origin(Any)
.allow_headers(Any);
let watcher_config = config.clone(); let watcher_config = config.clone();
let watcher_ip = ip.clone(); let watcher_ip = ip.clone();
let mut last_update_time = chrono::Local::now().timestamp(); let mut last_update_time = chrono::Local::now().timestamp();
@@ -267,6 +280,14 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig, star
let file_service_config = config.clone(); let file_service_config = config.clone();
let file_service = ServiceBuilder::new() let file_service = ServiceBuilder::new()
.override_response_header(
HeaderName::from_static("cross-origin-embedder-policy"),
HeaderValue::from_static("require-corp"),
)
.override_response_header(
HeaderName::from_static("cross-origin-opener-policy"),
HeaderValue::from_static("same-origin"),
)
.and_then( .and_then(
move |response: Response<ServeFileSystemResponseBody>| async move { move |response: Response<ServeFileSystemResponseBody>| async move {
let response = if file_service_config let response = if file_service_config
@@ -317,6 +338,7 @@ pub async fn startup_hot_reload(ip: String, port: u16, config: CrateConfig, star
let router = router let router = router
.route("/_dioxus/hot_reload", get(hot_reload_handler)) .route("/_dioxus/hot_reload", get(hot_reload_handler))
.layer(cors)
.layer(Extension(ws_reload_state)) .layer(Extension(ws_reload_state))
.layer(Extension(hot_reload_state)); .layer(Extension(hot_reload_state));
@@ -358,6 +380,13 @@ pub async fn startup_default(
let mut last_update_time = chrono::Local::now().timestamp(); let mut last_update_time = chrono::Local::now().timestamp();
let cors = CorsLayer::new()
// allow `GET` and `POST` when accessing the resource
.allow_methods([Method::GET, Method::POST])
// allow requests from any origin
.allow_origin(Any)
.allow_headers(Any);
// file watcher: check file change // file watcher: check file change
let allow_watch_path = config let allow_watch_path = config
.dioxus_config .dioxus_config
@@ -423,6 +452,14 @@ pub async fn startup_default(
let file_service_config = config.clone(); let file_service_config = config.clone();
let file_service = ServiceBuilder::new() let file_service = ServiceBuilder::new()
.override_response_header(
HeaderName::from_static("cross-origin-embedder-policy"),
HeaderValue::from_static("require-corp"),
)
.override_response_header(
HeaderName::from_static("cross-origin-opener-policy"),
HeaderValue::from_static("same-origin"),
)
.and_then( .and_then(
move |response: Response<ServeFileSystemResponseBody>| async move { move |response: Response<ServeFileSystemResponseBody>| async move {
let response = if file_service_config let response = if file_service_config
@@ -471,6 +508,7 @@ pub async fn startup_default(
) )
}), }),
) )
.layer(cors)
.layer(Extension(ws_reload_state)); .layer(Extension(ws_reload_state));
let addr = format!("0.0.0.0:{}", port).parse().unwrap(); let addr = format!("0.0.0.0:{}", port).parse().unwrap();