在 Apache Flume 上启用跨源资源共享

Enabling cross-origin resource sharing on Apache Flume

我正在开发一个基本上通过端口 8080 连接到 Flume 服务器的网页。每次客户端发送新请求时,它都会抛出 403 Forbidden 错误,因为 HTTP 源不知道如何处理 OPTIONS 请求。

Apache Flume 的文档中没有具体提及如何启用 CORS。

原来我不得不修改Flume的源代码。

在文件HTTPSource(私有classFlumeHTTPServlet)中,添加如下方法:

@Override
public void doOptions(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
    response.addHeader("Access-Control-Allow-Origin", "*");
}

我在 flume 前面使用 nginx 代理来设置 CORS headers 而不是 flume.

这是我的代理定义:

server {
#proxy server for flume
listen   15140; ## listen for ipv4; this line is default and implied
location / {
    if ($request_method = 'OPTIONS') {
                add_header Access-Control-Allow-Origin $http_origin always;
                add_header Access-Control-Allow-Credentials true always;
                add_header Access-Control-Allow-Methods 'GET,POST,PUT,DELETE,OPTIONS' always;
                add_header Access-Control-Allow-Headers 'Authorization,X-Requested-With,Content-Type,Origin,Accept,token' always;
                add_header Access-Control-Max-Age 3600;
                add_header Content-Length 0;
                return 200;
    }

    add_header Access-Control-Allow-Origin $http_origin always;
    add_header Access-Control-Allow-Credentials true always;
    add_header Access-Control-Allow-Methods 'GET,POST,PUT,DELETE,OPTIONS' always;
    add_header Access-Control-Allow-Headers 'Authorization,X-Requested-With,Content-Type,Origin,Accept,token' always;

    proxy_pass http://localhost:5140/;
}

希望这对您有所帮助