Отправка данных на URL-адрес HTTP-сервера SDC из JavaScript показывает проблему CORS

Я использую конвейер Streamsets для потоковой передачи данных из браузеров. Поэтому для этого я создал конвейер с источником HTTP-сервера для отправки данных из браузеров Javascript и попытался записать этот URL-адрес с помощью клиента REST, и он успешно пишет. Заголовки ответов уже заданы в файле SDC.properties.

http.access.control.allow.origin=*
http.access.control.allow.headers=origin, content-type, accept, authorization, x-requested-by, x-ss-user-auth-token, x-ss-rest-call
http.access.control.allow.methods=GET, POST, PUT, DELETE, OPTIONS, HEAD

Но когда я пытаюсь записать некоторые данные из JavaScript с помощью XMLHTTPRequest, возникает ошибка для предварительного запроса. Ниже приведен код JavaScript:

  var http = new XMLHttpRequest();
  var value = '{ "prop1": "value 2", "prop2": "value 2" }';
  var url ='http://13.68.93.97:8100/'
  var async = true
 if ('withCredentials' in http) {
    http.open('OPTIONS', url, async);
} else if (typeof XDomainRequest != "undefined") {
    http = new XDomainRequest(); //for IE
    http.open('OPTIONS', url);
} else {
    http.open('OPTIONS', url, async);
}
    http.open('POST', url, true);
    http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
    http.setRequestHeader('X-SDC-APPLICATION-ID', 'testApp1');
http.setRequestHeader("Access-Control-Allow-Origin", "*");
http.setRequestHeader('Access-Control-Allow-Methods', "POST, OPTIONS, GET");
http.setRequestHeader('Access-Control-Allow-Credentials', "true");
http.setRequestHeader('Access-Control-Expose-Headers', "X-Region");
http.setRequestHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Accept-language");
http.withCredentials = true;
http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
        console.log(http.responseText);
    }
}
http.send(value); 

Ошибка, вызванная выполнением вышеуказанного кода:

XMLHttpRequest не может загрузить http://13.68.93.97:8100/. Ответ на предварительный запрос не проходит проверку управления доступом: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://localhost' запрещен.

Любая помощь будет действительно полезной. Спасибо..!!


person Nishu Tayal    schedule 09.02.2017    source источник


Ответы (1)


ОБНОВЛЕНИЕ. В сборщик данных добавлена ​​поддержка CORS в версии 2.4.0.0, выпущенной в марте 2017 г.

Сборщик данных StreamSets в настоящее время не поддерживает CORS в Происхождение HTTP-сервера — эти свойства в файле sdc.properties предназначены для веб-интерфейса SDC. Я подал Jira, SDC-5298, но мне интересно, ваш вариант использования. Используете ли вы браузер только для экспериментов или видите реальный вариант использования для пользователей, отправляющих данные в SDC через JavaScript?

Если у вас есть вариант использования в производственной среде, оставьте комментарий к этой Jira, и мы рассмотрим возможность добавления CORS в источник HTTP-сервера.

Если вам просто нужен простой способ отправки данных, у вас есть несколько вариантов:

  1. Используйте curl из командной строки:

    curl http://localhost:8000/ -H 'X-SDC-APPLICATION-ID: bob' -d '{"a":"b"}'
    
  2. Установите расширение Chrome, например CORS Toggle, чтобы отключить Проверка CORS в Chrome.

  3. Запустите Chrome с параметром --disable-web-security.

person metadaddy    schedule 09.02.2017