如何在actix-web服务器中添加ACCESS_CONTROL_ALLOW_ORIGINheader?

How to add ACCESS_CONTROL_ALLOW_ORIGIN header in actix-web server?

我正在尝试添加 header 以允许从任何地方调用我的 API。

我尝试使用这个 (https://docs.rs/actix-web/latest/actix_web/http/header/constant.ACCESS_CONTROL_ALLOW_ORIGIN.html) 和值 * 作为响应 header

每个请求我都需要 header,所以我想我需要 wrap() App::new()

我的cargo.toml:

actix-multipart = "0.4.0"
actix-web = "4.0.1"
actix-service = "2.0.2"
actix-rt = "2.2.0"

下面的代码无效。有人知道怎么做吗?

HttpServer::new(move || {
        let api_service = web::scope("/api")
            .configure(routes_provider)
            .route("/", web::get().to(|| HttpResponse::Ok()));

        App::new()
            .wrap(Logger::default())
            .wrap_fn(|req, srv| {
                let fut = srv.call(req);
                async {
                    let mut res = fut.await?;
                    res.headers_mut()
                        .insert(ACCESS_CONTROL_ALLOW_ORIGIN, HeaderValue::from_static("*"));
                    Ok(res)
                }
            })
            .service(api_service)
    })
    .bind(bind_addr)?
    .run()
    .await

来自 client-side 的错误(React - Axios)

您是否尝试过将 https://docs.rs/actix-cors/latest/actix_cors/ 中的示例与 allow_any_origin 一起使用?

应用于您的代码可能类似于:

HttpServer::new(move || {
        let api_service = web::scope("/api")
            .configure(routes_provider)
            .route("/", web::get().to(|| HttpResponse::Ok()));
    
        let cors = Cors::default()
              .allow_any_origin() // <--- this
              .allowed_methods(vec!["GET", "POST"])
              .allowed_headers(vec![http::header::AUTHORIZATION, http::header::ACCEPT])
              .allowed_header(http::header::CONTENT_TYPE)
              .max_age(3600);

        App::new()
            .wrap(cors)
            .wrap(Logger::default())
            .service(api_service)
    })
    .bind(bind_addr)?
    .run()
    .await