gocd — в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Я хочу загружать артефакты в конвейер gocd, используя их API, который называется POST /go/files/:pipeline_name/:pipeline_counter/:stage_name/:stage_counter/:job_name/*path_to_file. У меня есть приложение nodejs с включенным Google oauth2. Я загружаю файлы и загружаю их с помощью запроса POST в angularjs.

<script>
    angular.module('fupApp', [])
        .directive('ngFiles', ['$parse', function ($parse) {

            function fn_link(scope, element, attrs) {
                var onChange = $parse(attrs.ngFiles);
                element.on('change', function (event) {
                    onChange(scope, { $files: event.target.files });
                });
            };

            return {
                link: fn_link
            }
        } ])
        .controller('fupController', function ($scope, $http) {

            var formdata = new FormData();
            $scope.getTheFiles = function ($files) {
                angular.forEach($files, function (value, key) {
                    formdata.append(key, value);
                });
            };

            // NOW UPLOAD THE FILES.
            $scope.uploadFiles = function () {

                var request = {
                    method: 'POST',
                    url: 'https://<mydomain1.net>:8154/go/files/FirstPipeline/13/defaultStage/1/defaultJob/',
                    data: formdata,
                    headers: {
                        'Content-Type': 'multipart/form-data'
                    }
                  };

                // SEND THE FILES.
                $http(request)
                    .success(function (d) {
                        alert(d);
                    })
                    .error(function () {
                    });
            }
        });
</script>

Я пытаюсь выполнить запрос с mydomain2.net на mydomain1.net (это gocd). Однако в браузере после выбора файла и нажатия кнопки «Отправить» я получаю эту ошибку после проверки (Ctrl + Shift + I).

Доступ к XMLHttpRequest по адресу 'https://mydomain1:8154/go/files/FirstPipeline/13/defaultStage/1/defaultJob/' из источника 'http://mydomain2:3000» заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Где должен быть добавлен заголовок Access-Control-Allow-Origin на стороне GoCD?


person Tech Girl    schedule 15.10.2019    source источник
comment
Насколько я могу судить по исходникам и документам GoCD, у него нет встроенной поддержки CORS. Похоже, что вместо этого рекомендуемый способ разрешить запросы к нему из внешнего кода JavaScript, работающего в браузере, — это поместить «обратный прокси» между ними (аналогично тому, что предлагает @talhature). См. документы по адресу docs.gocd.org/current/installation/configure- обратный прокси.html   -  person sideshowbarker    schedule 15.10.2019
comment
@sideshowbarker, спасибо. Я буду рассматривать обратный прокси. Можете ли вы помочь мне с тем, где мне нужно добавить конфигурацию, если я хочу добавить заголовок Access-Control-Allow-Origin на стороне сервера gocd? Это после установки nginx, где находится мой сервер, а затем в каком-то файле или где? Я совершенно новичок в nginx.   -  person Tech Girl    schedule 17.10.2019


Ответы (1)


Браузеры вызывают ошибку перекрестного происхождения, когда одна веб-страница, находящаяся в другом домене, пытается получить доступ к ресурсам другого домена.

Если запрашивающая сторона не является браузером, CORS неприменим. Таким образом, вы можете настроить прокси-сервер между ними. Проверьте раздел редактирования этого вопроса: Как включить CORS в AngularJs

Обычно прокси-серверы не должны использоваться в реальных приложениях в производстве, но, насколько я понимаю, вы пытаетесь добиться интеграции CI / CD для вашего рабочего процесса разработки. Так что все должно быть в порядке.

Вы также можете погуглить, как установить прокси для AngularJS в среде NodeJS.

person talhature    schedule 15.10.2019
comment
Спасибо за оперативный ответ! Попробую обратный прокси :) - person Tech Girl; 17.10.2019
comment
Добро пожаловать, я надеюсь, вы не пропустите тот факт, что то, что я назвал прокси, здесь является обратным прокси. Так что вы не думаете, что я заслуживаю хотя бы плюса :) - person talhature; 18.10.2019