Как сделать кроссдоменный запрос средствами 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
|
Как победить эту бяку?
|