xmpp Opera выдает ошибку безопасности - PullRequest
0 голосов
/ 02 марта 2012

гуру программирования!Я создал чат, основанный на книге «Программирование XMPP», поэтому я включил strophe.js и gab.js в свой проект.Все отлично, сервис работает как в IE, так и в Firefox.Но не Opera, Opera в этом случае выдает исключение

Uncaught exception: ReferenceError: Security violation
Error thrown at line 2554, column 16 in <anonymous function: _processRequest>() in http://chat.aviportal.com/strophejs/strophe.js:
req.xhr.send(req.data);
called from line 2566, column 16 in <anonymous function: _processRequest>(i) in http://chat.aviportal.com/strophejs/strophe.js:
sendFunc();
called from line 2607, column 12 in <anonymous function: _throttledRequestHandler>() in http://chat.aviportal.com/strophejs/strophe.js:
this._processRequest(0);
called from line 2709, column 16 in <anonymous function: _onRequestStateChange>(func, req) in http://chat.aviportal.com/strophejs/strophe.js:
this._throttledRequestHandler();

Пожалуйста, дайте мне знать, если у кого-то были подобные проблемы, или, возможно, я выслушаю ваши советы.Заранее спасибо, Алекс

Отредактировано: Хорошо, во-первых, спасибо за ответ!

$(document).ready(function() {
    var conn = new Strophe.Connection(
        'http://chat.aviportal.com:5280/xmpp-httpbind');

    conn.connect('guest2@chat.aviportal.com', 'passwd', function (status) {
    if (status === Strophe.Status.CONNECTED) {
        $(document).trigger('connected');
    } else if (status === Strophe.Status.DISCONNECTED) {
        $(document).trigger('disconnected');
    }
});

Вот как я инициализирую соединение strophe, процесс отрывается от conn.connect ('guest2@ chat.aviportal.com 'и т. д.) В этой строке выдается исключение.Кстати, что такое CORS, кросс-доменные запросы?Ejabberd в том же поддомене, что и файл php, так что я не думаю, но есть небольшая вероятность, что это ^ _ ^

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Несмотря на то, что ваш веб-сервер работает в том же домене, что и ejabberd, доступ к другому порту ДЕЙСТВУЕТ междоменный запрос и должен вызвать исключение безопасности.Таким образом, подключение к domain:5280 - это не то же самое, что domain:80.

. Чтобы решить эту проблему, вы должны включить прокси в настройках.Скорее всего, у вас уже есть apache или nginx, поэтому вам нужно просто прокси domain:80/http-bind, чтобы перейти на domain:5280.Например, для nginx у вас должно быть что-то вроде:

    location /http-bind {
        proxy_buffering off;
        tcp_nodelay on;
        keepalive_timeout 55;
        proxy_pass http://localhost:5280;
    }

в вашем nginx.conf.

1 голос
/ 24 мая 2013

Вы можете исправить это и без Jquery!

Добавьте в заголовок файла, из которого вы извлекаете данные, следующее:

Access-Control-Allow-Origin: *
0 голосов
/ 03 марта 2012

Попробуйте поместить это в свой файл, если используемые вами библиотеки основаны на jQuery:

jQuery.support.cors = true;

Эта ошибка вызвана тем, что Opera блокирует межсайтовый запрос. CORS позволит выполнять межсайтовые запросы с обычной веб-страницы, если это позволяет сценарий на стороне сервера.Подробнее здесь .

В настоящее время Opera разрешает межсайтовые запросы только внутри расширений, если вы указываете в config.xml файл.Однако, даже если вы попытаетесь использовать jQuery в расширении для выполнения XSS-запроса, вы получите нарушение безопасности, если не включите в файл строку, о которой я упоминал в начале.

...