Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ext.Ajax.request кроссдоменный запрос, ExtJs 3.4 
:(
    Опции темы
ZVano
  Дата 27.11.2015, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Как сделать кроссдоменный запрос средствами ExtJs 3.4?

Задача связана с темой "WebSocket (Java сервер) Какие есть способы?" http://forum.vingrad.ru/forum/topic-385412...start-jnls.html
Принцип работы системы:
В интернете есть некий сайт (например, my.bank.com)
Сайту нужен функционал наложения ЭЦП.
Для этого из браузера вызываем window.open('my.bank.com/java/myApp.jnlp')
Эта команда запустит на компьютере пользователя Java-программу (десктопную), которая поднимет в себе Web-сервер.
Web-сервер поднимется на localhost:8080 и будет принимать запросы с данными для подписи, а позднее отдавать результат в браузер.
Но тут затык: Ext.Ajax.request не дает выполнить запрос к localhost, если страница была загружена с ресурса my.bank.com

Использую 
Код

            Ext.Ajax.cors = true;
            Ext.Ajax.useDefaultXhrHeader = false;
            Ext.Ajax.request({
                url: "http://localhost:8080/func",
                method: methot,
                scope: this,
                
                
                // cors: true,
                //useDefaultXhrHeader : false,
                //useDefaultHeader : false,
                // responseURL : 'localhost:8080',
                headers : {
                  //'Access-Control-Allow-Credentials' : false,
                  // 'X-Requested-With': 'XMLHttpRequest'//,
                  //'Host' : 'localhost:8080',
                  //'Origin' : 'localhost:8080'
                },
                // headers: [{ 'Content-Type' : 'multipart/form-data' }],
                success: function (response, opts) {
                    win.getEl().unmask();
                    console.log('ajaxJavaPtinter/success', arguments);
                    var json = Ext.decode(response.responseText);
                    formPanel.getForm().setValues({
                        log: json.data
                    });
                },
                failure: function (response, opts) {
                    console.log('ajaxJavaPtinter/failure', arguments);
                }
            });


Заголовки HTTP:
Код

>>General
Remote Address:[::1]:8080
Request URL:http://localhost:8080/func?_dc=1448639437755
Request Method:OPTIONS
Status Code:200 OK

>>Response Headers
Allow:GET, HEAD, POST, TRACE, OPTIONS
Content-Length:0
Server:Jetty(7.2.0.v20101020)

>>Request Headers
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2
Access-Control-Request-Headers:x-requested-with
Access-Control-Request-Method:GET
Connection:keep-alive
Host:localhost:8080
Origin:null
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36

>>view URL encoded
_dc:1448639437755



При этом jquery работает
Код

// <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    $.ajax({
        url: "http://localhost:8080/func",
        success:function(json){
            if (json.error == 0)
                $("#result").val(json.result);
            else
                $("#result").val("Error");
        },
        error:function(){
            $("#result").val("Error");
        }
    });


Заголовки HTTP:
Код

>>General
Remote Address:[::1]:8080
Request URL:http://localhost:8080/func?a=8.78&b=4.15&op=%2B
Request Method:GET
Status Code:200 OK

>>Response Headers
Access-Control-Allow-Origin:*
Content-Length:70
Content-Type:application/json; charset=UTF-8
Server:Jetty(7.2.0.v20101020)

>>Request Headers
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2
Connection:keep-alive
Host:localhost:8080
Origin:null
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36


Понятно, что проблема в том, что сервер не возвращает заголовок "Access-Control-Allow-Origin:*" при обращении из ExtJs.
Скорее всего, это происходит потому что  ExtJs дополнительно шлет заголовки
Код

Access-Control-Request-Headers:x-requested-with
Access-Control-Request-Method:GET


Как победить эту бяку?



--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.1086 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.