Междоменные запросы в Dart на стороне сервера

Пишу кучу скриптов на javascript и хочу перейти на dart или хотя бы начать им пользоваться. У меня есть один вопрос: я знаю, что js не поддерживает запросы x-доменов в браузере, но как насчет запуска приложения/скрипта dart с сервера, он все тот же? это вообще можно сделать?

в основном, поскольку у меня нет доступа к веб-серверу, к которому я обращаюсь, междоменная возможность является большой необходимостью.


person Tar At Work    schedule 21.03.2013    source источник


Ответы (3)


Похоже, вы можете спросить о написании сценария командной строки на стороне сервера, который может отправлять запросы на HTTP-сервер. Хотя формулировка вопроса мне не совсем ясна. (Ответы выше относятся к сценариям Dart на основе браузера.)

Это возможно с Дартом. В этом случае нет ограничений по перекрестному происхождению.

См. класс HttpClient. Или вы можете использовать пакет http://pub.dartlang.org/packages/http в pub.

Я рекомендую использовать пакет http, так как он обеспечивает более простой высокоуровневый интерфейс.

Вот пример использования пакета http:

import 'dart:io';
import 'package:http/http.dart' as http;

main() {
    http.read("http://google.com").then((content) {
        print(content);
    });
}

Вам потребуется обновить файл pubspec.yaml, чтобы добавить следующие зависимости:

name: Http Example
   dependencies:
     http: any
     pathos: any

(На самом деле вам нужно включить только http, но я думаю, что в пакете http отсутствует пафосная зависимость в файле pubspec.yaml.)

Мне не удалось найти красивую документацию по http, но в исходный файл.

person Greg Lowe    schedule 21.03.2013
comment
Я добавил пример. Если это работает для вас, пожалуйста, отметьте вопрос как ответ;) - person Greg Lowe; 24.03.2013

Междоменная безопасность встроена в браузер, поэтому ее нет ни в Dart, ни в JavaScript.

Полезно для тестирования: вы можете передать флаги в chrome, которые отключат эту функцию безопасности. См. здесь: http://joshuamcginnis.com/2011/02/28/how-to-disable-same-origin-policy-in-chrome/

Если вы хотите выполнить запрос GET, вы можете использовать взаимодействие Dart JavaScript, см. этот раздел в этой статье: http://www.dartlang.org/articles/json-web-service/#note-on-cors

С другой стороны, если вы хотите отправлять запросы POST, вы столкнетесь с проблемами, если целевой сервер не поддерживает CORS. Подробнее здесь: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

Редактировать. Правильный подход заключается в том, чтобы ваш клиентский код взаимодействовал с сервером, которым вы владеете, а этот сервер взаимодействовал со сторонним сервером.

person Chris Buckett    schedule 21.03.2013
comment
Так что dart — это, по сути, приукрашенный javascript и бесполезен в моем контексте? у меня нет доступа к серверу, поэтому я не могу изменить какие-либо заголовки или выполнить CORS. - person Tar At Work; 22.03.2013
comment
И Dart, и JavaScript при работе в браузере (в отличие от автономных виртуальных машин на стороне сервера) подчиняются тем же ограничениям безопасности, которые налагает браузер (для вашей собственной безопасности). Иначе что может помешать кому-то просто использовать Dart для написания вредоносных скриптов вместо JS? Как указано в другом ответе, правильным подходом было бы, чтобы ваш клиентский код взаимодействовал с сервером, которым вы владеете, и чтобы этот сервер взаимодействовал со сторонним сервером. - person Chris Buckett; 22.03.2013

Вы можете включить запросы из разных источников на сервер, установив заголовок Access-Control-Allow-Origin в ответе http. Значение равно *, чтобы разрешить доступ к ресурсу любому источнику, но определенно безопаснее указать допустимые источники.

person w.brian    schedule 21.03.2013