Как настроить CORS или OPTIONS для Rocket.rs - PullRequest
1 голос
/ 16 июня 2020

У меня есть серверная часть, на которой запущен rocket.rs, которому мое веб-приложение flutter отправляет запрос, но оно не может пройти мимо ответа OPTIONS.

Я попытался добавить CORS (rocket_cors) в бэкэнд и получить ответ с параметрами, но он все равно отправляет обратно:

Error: XMLHttpRequest error.
    dart:sdk_internal 124039:30                           get current
packages/http/src/browser_client.dart.lib.js 214:124  <fn>

Я добавил следующее в свой проект ракеты:

#[options("/")]
fn send_options<'a>(path: PathBuf) -> Response<'a> {
    let mut res = Response::new();
    res.set_status(Status::new(200, "No Content"));
    res.adjoin_header(ContentType::Plain);
    res.adjoin_raw_header("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
    res.adjoin_raw_header("Access-Control-Allow-Origin", "*");
    res.adjoin_raw_header("Access-Control-Allow-Credentials", "true");
    res.adjoin_raw_header("Access-Control-Allow-Headers", "Content-Type");
    res

И мое приложение flutter выполняет этот запрос:

Future<String> fetchData() async {
  final data2 = await http.get("http://my-web-site.com").then((response) { // doesn't get past here
    return response.body; 
  });
  return data2;
}

Вопрос: это правильный способ отвечать на запросы OPTION, и если нет, как я могу реализовать его в ракете. RS?

1 Ответ

0 голосов
/ 17 июня 2020

Комментарий Lambda Fairy ответил за меня.
Я поместил все это в GET Handler:

#[get("/")]
fn get_handler<'a>() -> Response<'a> {
    let mut res = Response::new();
    res.set_status(Status::new(200, "No Content"));
    res.adjoin_header(ContentType::Plain);
    res.adjoin_raw_header("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
    res.adjoin_raw_header("Access-Control-Allow-Origin", "*");
    res.adjoin_raw_header("Access-Control-Allow-Credentials", "true");
    res.adjoin_raw_header("Access-Control-Allow-Headers", "Content-Type");
    res.set_sized_body(Cursor::new("Response")); 
    res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...