Возможно ли использовать 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 и так далее.