Возможно ли использовать easyXDM (или любую другую клиентскую среду) для проверки доступности службы HTTP (или анализа ответов вообще)?

Я не могу видеть из документов, как это должно работать. Отладка с помощью Firebug тоже не помогла. Возможно, мне пришлось бы посидеть несколько часов, чтобы понять это лучше.

Основная проблема в том, что я хотел бы проверить доступность различных гео-сервисов ( WFS , WMS ) Из-за проблемы ограничений браузера XSS XmlHttpRequest не работал.

Я думаю, Socket интерфейс является подходящим для использования, так как я не могу реализовать некоторые CORS сценарии, потому что я не имею никакого влияния на внешние услуги.

Использование следующего кода работает нормально и возвращает некоторые запрошенные данные (всплывающее окно Firefox для загруженного XML-ответа):

var socket = new easyXDM.Socket({
    remote: "http://path.to/provider/", // the path to the provider
    onReady:function(success) {
        alert(success);  // will not be called
    }
    onMessage:function(message, origin) {
        alert(message, origin);  // will not be called
    }
});

Однако я не нашел пути (пытаясь с onReady а также onMessage обратные вызовы), чтобы как-то добраться до некоторого HTTP status объект, который я могу обработать, чтобы определить, какой ответ, например, 200 , 404, Я получил.

Может быть, это совершенно неверный способ решить эту проблему?

1 ответ

Решение

К сожалению, даже моя щедрость не помогла получить ответы, поэтому я быстро огляделся, чтобы собрать больше информации по этому вопросу... Сначала...

общая проблема XSS

Глядя на XSS и некоторые связанные вопросы / ссылки, обсуждается больше проблем, чем решений (что нормально).

Глядя на соответствующие документы Firefox о политике JavaScript одного и того же происхождения, становится ясно, что наш глобальный лозунг " Безопасность над свободой1" также применяется в этой области. (Лично мне не нравится этот способ решения проблемы, и я хотел бы увидеть другой способ решения этих проблем, как описано в конце этого ответа.)

1: хорошо приписывается заявлению Бенджамина Франклина (основателя США): тот, кто жертвует свободой ради безопасности, не заслуживает ни того, ни другого.

решение CORS (=> зависимости от внешнего сервера)

Единственным поддерживаемым стандартным / надежным способом является использование функции CORS (Cross Origin Resource Sharing). В основном это означает, что внешний сервер должен по крайней мере доставить некоторую CORS- совместимую информацию (HTTP HeaderAccess-Control-Allow-Origin: *) позволить другим (= клиентскому браузеру) запрашивать данные / контент /.... Это также означает, что если кто-то не имеет контроля над внешним сервером, не будет никакого общего надежного способа настороне клиента / браузера, чтобы сделать это совсем:-(.

надежное решение для серверных / клиентских приложений (если нет внешнего управления сервером)

Таким образом, если наш внешний сервер не поддерживает CORS или он не настроен для использования нашим источником запроса (комбинация протокола / домена / порта), то лучше всего делать такой доступ на нашей стороне сервера приложений, где у нас нет такого рода ограничения, но, конечно, другие последствия.

решение на стороне клиента, которое я хотел бы видеть

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

Лично мне не нравится, когда меня просматривают в Интернете, и я не люблю, когда меня тормозят из-за плохого оборудования или сетевых ресурсов, а также не хочу просто избегать проблем с безопасностью данных при просмотре веб-страниц. Вот почему я использую Firefox с различными полезными плагинами, такими как RequestPolicy, AdBlock Plus, Ghostery, Cookie Monster, Flashblock.... Это уже показывает сложность, с которой обычно не справится ни один средний пользователь. Но особенно если посмотреть на RequestPolicy, он показывает, как можно обрабатывать доступ к внешним ресурсам на стороне клиента.

Таким образом, если, например, Firefox (без этих плагинов) будет поддерживать некоторые функции, чтобы показать пользователю диалог, похожий на RequestPolicy, который может указывать что-то вроде следующего, мы могли бы ослабить политику одного источника:

  [x] 'http://srcdomain.com' (this site)
  [ ] all sites  (select to block/allow for all sites)

would like to request some data from 

  [x] 'http://dstdomain.com'
  [x] 'http://dst2domain.com' 

in a generally considered UNSECURE way.

You can selected one of the following options about how to proceed with
access to the selected sites from the selected sites:

  [x] block always (generally recommended)
  [ ] block only for this session
  [ ] allow always (but not to subreferences)  [non-recursively]
  [ ] allow only for this session (but not to subreferences)  [non-recursively]
  [ ] allow always (and all subreferences)  [recursively]
  [ ] allow only for this session (and all subreferences)  [recursively]

Конечно, это должно быть сформулировано настолько ясно, насколько это возможно для обычного пользователя, что я, конечно, здесь не делал, и может быть обработано также по умолчанию в настройках, как это делают другие существующие технологии (Cookie Handling, JavaScript Handling, ...), делающие это.,

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

ответ относительно easyXdm

Я думаю, так как они также рекомендуют CORS и зависят от браузеров, это единственный надежный способ, хотя некоторые обходные пути могут все еще существовать, в зависимости от браузеров / версий / плагинов, таких как Flash и так далее.

Другие вопросы по тегам