我有一个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?如果是,我在这里想念什么?
答案 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>