如何使用Apache修改传入的响应标头?

时间:2018-10-11 13:54:37

标签: reactjs apache cors

我有一个ReactJS应用程序,为该产品生成了生产版本,并将生成文件夹放置在/ var / www / html /中(我认为这是正确的部署方式)。

我正在从该ReactJS应用程序调用不支持CORS的API。我发现了很多关于允许在Apache上使用CORS的帖子和问题,但是我不确定这是否是我想要的。我没有运气跟随这些职位。我怀疑这些指南是为了在未收到的外发响应中添加CORS?

无论如何,我添加到/etc/apache2/apache2.conf中的内容是:

function exportRenderedCompany(idArray) {
    // idArray is an array, but could just have one element

    var countRequests = idArray.length;

    while (idArray.length > 0) {
        var id = idArray.shift();

        // renderedCharts.find(x => x.id == id)... IE11 does not recognise 'find', so
        var foundChart;

        for (var i = 0; i < renderedCharts.length; i++) {
            if (renderedCharts[i].id == id) {
                //foundChart = renderedCharts[i].chart;
                foundChart = $('#chartTargetPrice' + id).getKendoChart();
                break;
            }
        }

        foundChart.exportImage({ width: 694, height: 250 }).done(function (data) {

            // split 'image/png,xxxyyy=' into two
            var dataParts = data.split(',', 2);
            // TODO: need to strip from 'data:image/png;base64'
            dataParts[0] = 'image/png';

            $.ajax({
                url: "@Url.Action("Export_TargetPrice", "Charts")",
                type: 'POST',
                data: { contentType : dataParts[0], base64 : dataParts[1], companyID: id }
            }).done(function () {
                countRequests--;
                if (countRequests <= 0) {
                    window.location.href = "@Url.Action("Recommendations","Charts", new { page = page + 1 })#autoOnRender";
                }
            });
        });
    }
}

我在Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" Header always set Access-Control-Max-Age "1000" Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token" 下添加了这些

我还尝试将以上4行添加到<Directory /var/www/html>内的.htaccess中

再也没有成功。

我想提一下,我无法修改api服务器,而且我已经成功使用中间的python flask应用程序修改了标头。但是,我需要删除该python应用程序,并使用Apache来完成此任务。

是否可以使用apache修改对部署apache的服务器的传入响应,从而启用cors?如果是,我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

我遵循this guide达成了解决方案。显然,apache无法拦截传入的响应并向其添加标头。据我所知,这是当然的。它可以做的是充当反向代理。

反向代理的工作方式是这样的,例如,我的应用程序应将HTTP请求发送到apache“ / api”中定义的url。在apache配置中,您定义“ / api”位置以将请求重定向到所需的任何服务器url。然后,您使用apache添加标头,当收到来自该服务器的响应时,该标头将添加标头并使用cors enable标头将响应返回给您。我在apache中使用的代码如下:

<LocationMatch "/api">
   ProxyPass http://remote-server.com:8000/api/
   Header add "Access-Control-Allow-Origin" "*"
</LocationMatch>