2016-02-15 1 views
-1

--Ajax Метод вызова, чтобы получить ответ с точки зрения формата HTMLCORS Проблема с унаследованной системой - Нет 'Access-Control-Allow-Origin' заголовок

function send_with_ajax(brand) { 
    var httpRequest = new XMLHttpRequest(); 
    httpRequest.onreadystatechange = function() { alertContents(httpRequest); }; 
    httpRequest.open("GET", "https://XXXX--LEGACY SYSTEM--XXXX", true); 
    httpRequest.setRequestHeader('Access-Control-Allow-Origin', 'https://XXXX--LEGACY SYSTEM's IP Address--XXXX/'); 
    httpRequest.send(null); 
} 

function alertContents(httpRequest) { 
    alert(httpRequest.readyState); 
    if (httpRequest.readyState == 4) { 
     // everything is good, the response is received 
     if ((httpRequest.status == 200) || (httpRequest.status == 0)) { 
      //Get the httpRequest.responseText 
     } else { 
      //Error with the response or Failed to load the response; 
     } 
    } 
} 

Привет, В приведенном выше коде JS, я создали объект activeX, чтобы попасть в унаследованную систему (что означает, что API-интерфейсы CORS не присутствуют в конечной точке Java). Следуя тому же, я ожидаю получить ответ типа типа HTML. Это отлично работает от IE (в стиле HTML-кода), но при попытке использовать то же самое с помощью Chrome (с портированным кодом HTML5), я закончил проблему CORS. Хорошо ... Это случается, И я пытаюсь настроить заголовок здесь, чтобы разрешить его, но он также пропал даром. Есть ли способ решить это. Пожалуйста, будьте осторожны, я пытаюсь взаимодействовать с устаревшей системой, в которой компонент java для конечной точки не может иметь никаких изменений. Пожалуйста, помогите !!!

+1

заголовки 'access-control-allow-origin' установлены в ** отклике **, а не запрос ... на самом деле их установка в запросе может иметь отрицательные последствия. –

+0

'устаревшая система, в которой компонент java-компонента конечной точки не может иметь никаких поправок' - в основном у вас есть два варианта: изменить сервер или использовать сервер, на котором подана ваша страница из, чтобы сделать запрос для вас –

+0

Вы уже собирались сказать, что и клиент, и службы должны находиться на одной машине, чтобы решить эту проблему ... не так ли ??? –

ответ

0

Вы не установите Access-Control-Allow-Origin в запросе, вы установите его (и несколько других необходимых заголовков) в ответ. Сервер - это то, где принимается решение о том, разрешены ли запросы с кросс-началом (решение, которое затем выполняет браузер).

я пытаюсь взаимодействовать с унаследованной системой, где конечная точка Java компонент не может иметь каких-либо поправок

Тогда вы не можете напрямую запрашивать его с AJAX из другого источника. Вместо этого вам нужен какой-то прокси-сервер, например второй процесс, выполняющийся на сервере (или на другом сервере), который вы можете запросить, который, в свою очередь, запрашивает тот, с которым вы действительно хотите поговорить. Это работает, потому что SOP применяется к запросам из браузеров, но не-браузеры могут делать запросы с кросс-началом, если они им нравятся.

Существует несколько проектов прокси-сервера CORS (это разумный для них термин поиска), как для запуска на ваших серверах, так и для тех, которые вы можете использовать прямо как crossorigin.me (просто пример, а не одобрение , не знаю, хорошо ли это). Если вы используете услугу, вы, естественно, должны доверять им, так как все данные (в обоих направлениях) протекают через их сервер ...

+0

Есть ли другой способ без использования прерывистого компонента (Proxy Server) ??? Mine - это автономная HTML-страница ... которая не требует каких-либо других зависимостей ... И в итоге она хорошо работает с IE в традиционном HTML-способе ... Я хочу сохранить это свойство в хроме, а также для HTML5 tooo .. Если ничего другого не будет ... нужно будет использовать идеологию прокси-сервера :) –

+0

@VijayLMarcelin: Ну, как я уже говорил выше, есть службы, которые будут выполнять проксирование для вас. Вы также можете использовать YQL в качестве междоменного прокси (http: // ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax), но зависит ли это от вас от того, что вы читаете из другого источника. –

+0

Спасибо @CrowderTJ! Посмотрите это –

0

Способ преодоления ограничения перекрестного происхождения - использование консоли yql yahoo. Вы можете передавать данные (также html для вашего случая) между сайтами с разными доменами. Вы можете проверить это here. В левом меню перейдите к data-> html и сделайте запрос, например select * from html where url="http://your.different.domain.com". Затем просто используйте URL-адрес yahoo, который предоставляет без ограничений проблемы.

Смежные вопросы