gocd - 请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】gocd - 请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:gocd - No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2020-02-11 17:32:57 【问题描述】:

我想使用他们的 API POST /go/files/:pipeline_name/:pipeline_counter/:stage_name/:stage_counter/:job_name/*path_to_file 将工件上传到 gocd 管道。我有启用了 google oauth2 的 nodejs 应用程序。我正在上传文件并使用 angularjs 中的 POST 请求上传它们。

<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.netmydomain1.net 请求(这是 gocd)。但是,在选择文件并单击提交后的浏览器中,我在检查后出现此错误(Ctrl+Shift+I)。

从源“http://mydomain2:3000”访问“https://mydomain1:8154/go/files/FirstPipeline/13/defaultStage/1/defaultJob/”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

Access-Control-Allow-Origin 标头应该在 GoCD 端添加到哪里?

【问题讨论】:

据我查看 GoCD 源代码和文档可以看出,它没有对 CORS 的内置支持。相反,从浏览器中运行的前端 javascript 代码向它发出请求的推荐方法似乎是在两者之间放置一个“反向代理”(类似于 @talhature 建议的)。请参阅docs.gocd.org/current/installation/configure-reverse-proxy.html 上的文档 @sideshowbarker,谢谢。我将考虑反向代理。如果我想在 gocd 服务器端添加 Access-Control-Allow-Origin 标头,您能帮我在哪里添加配置吗?是在我的服务器所在的位置安装 nginx 之后,然后在某个文件中还是在哪里?我对 nginx 完全陌生。 【参考方案1】:

当不同域下的一个网页尝试访问不同域的资源时,浏览器会引发跨域错误。

如果请求者不是浏览器,则 CORS 不适用。 因此,您可以在两者之间设置代理服务器。检查此问题的编辑部分:How to enable CORS in AngularJs

通常,代理不应在生产中的实际应用程序中使用,但据我了解,您想要实现的是开发工作流程的 CI/CD 集成。所以应该没问题。

您还可以在 Google 上搜索如何在 NodeJS 环境中为 AngularJS 设置代理。

【讨论】:

感谢您的及时答复!我会尝试反向代理:) 您好,我希望您不要错过我在这里称为代理的事实是反向代理。所以你不认为我至少应该得到一个赞成票:)

以上是关于gocd - 请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”

如何解决请求的资源上不存在“Access-Control-Allow-Origin”标头

Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头

请求的资源发布请求上不存在“Access-Control-Allow-Origin”标头

Angular 2请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]

API 请求错误 - 请求的资源上不存在“Access-Control-Allow-Origin”标头