Dart BrowserClient POST не включает мои файлы cookie

Я выполняю BrowserClient POST для разных доменов и не вижу включения моих файлов cookie.

Это ответ, который я получаю:

введите здесь описание изображения

Когда я отправляю другой запрос POST, я не вижу включенных файлов cookie:

введите здесь описание изображения

Перейдя прямо на тестовую страницу, я вижу, что файлы cookie включены:

введите здесь описание изображениявведите здесь описание изображения

Код Dart, который я использую для создания POST:

var client = new BrowserClient();

client.post(url, body: request, headers:{"Content-Type" : "application/json", "Access-Control-Allow-Credentials":"true"}).then((res) {
      if (res.statusCode == 200) {
        var response = JSON.decode(res.body);

        callback(response);
      } else {
        print(res.body);
        print(res.reasonPhrase);
      }
    }).whenComplete(() {
      client.close();
    });

Не уверен насчет заголовка Access-Control-Allow-Credentials, который я включаю, с ним или без него ничего не меняется.

Я пропускаю заголовки на стороне сервера, которые необходимо установить в ответе, или Dartium блокирует междоменные файлы cookie?

Подробнее о Информационная безопасность и причины установки файлов cookie через сервер.

Обновление: зарегистрирован запрос на улучшение: https://code.google.com/p/dart/issues/detail?id=23088

Обновление: реализовано улучшение, теперь можно выполнять var client = new BrowserClient()..withCredentials=true; на основе https://github.com/dart-lang/http/commit/9d76e5e3c08e526b12d545517860c092e089a313


person Jan Vladimir Mostert    schedule 03.04.2015    source источник
comment
Я думаю, вам нужно установить withCredentials=true в вашем почтовом запросе, но я еще не нашел, как это сделать с запросом из http-пакета (например, в stackoverflow.com/questions/21770445 или stackoverflow.com/questions/16939328).   -  person Günter Zöchbauer    schedule 03.04.2015
comment
Я вижу, что для этого есть специальные условия в angular.dart, но не в BrowserClient github. com/dsalsbury/angular.dart/commit/   -  person Jan Vladimir Mostert    schedule 03.04.2015
comment
Если angular.dart делает это, наверняка он должен вызывать стандартные библиотеки dart под капотом или у angular.dart есть собственная библиотека, подобная BrowserClient?   -  person Jan Vladimir Mostert    schedule 03.04.2015
comment
Нет, в браузере вы не можете выполнять HTTP-запросы, кроме использования HttpRequest API из dart:html. Angular и browserClient просто пересылают его. Пакет http был создан, чтобы иметь унифицированный API между клиентом и сервером. На сервере он перенаправляется на dart:io, а в браузере на dart:html.   -  person Günter Zöchbauer    schedule 03.04.2015
comment
Можно ли выполнять HTTP-запросы непосредственно к API HttpRequest в dart:html, тем самым выполняя собственную реализацию BrowserClient? В противном случае следует ли регистрировать запрос функции withCredentials в пакете BrowserClient?   -  person Jan Vladimir Mostert    schedule 03.04.2015
comment
Конечно, нет необходимости использовать пакет http. В основном это сделано для удобства кода, предназначенного для клиента и сервера. Да, создайте отчет об ошибке/запрос функции на dartbug.com.   -  person Günter Zöchbauer    schedule 03.04.2015
comment
Я зарегистрировал запрос на улучшение: code.google.com/p/ dart/issues/detail?id=23088 А пока я перейду на более низкий уровень и буду напрямую использовать HttpRequest.   -  person Jan Vladimir Mostert    schedule 03.04.2015


Ответы (1)


Для файлов cookie, отправляемых на запросы CORS, необходимо установить withCredentials = true. Клиент браузера в пакете http не поддерживает этот аргумент. Вместо этого вы можете использовать HttpRequest из dart:html. В качестве примера см. Как использовать dart-protobuf.

person Günter Zöchbauer    schedule 03.04.2015
comment
Пулл-реквест с исправлением для http-пакета уже сделан. Надеюсь скоро опубликуют. - person Günter Zöchbauer; 03.04.2015
comment
Я могу увидеть исправление на Github, каковы обычные сроки публикации исправлений? Если это будет около недели, я немного подожду, в противном случае я буду следовать примеру dart-protobuf, чтобы я мог хотя бы закончить свой слой аутентификации. - person Jan Vladimir Mostert; 08.04.2015
comment
Согласно журналу изменений на pub.dartlang.org, релиз, содержащий это изменение, был выпущен два дня назад. - person Günter Zöchbauer; 08.04.2015
comment
Вы можете просто обновить пакет, а не всю установку Dart. Просто запустите pub upgrade в командной строке из каталога вашего пакета или из контекстного меню файла pubspec.yaml в DartEditor. - person Günter Zöchbauer; 08.04.2015