You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Rasa Core HTTP API启用CORS支持适配Angular前端?

解决Rasa Core HTTP API的CORS跨域问题

我之前在对接Rasa Core和前端应用时也碰到过一模一样的跨域问题——Postman能正常调用但浏览器里前端请求就报错,这本质是浏览器的同源策略在限制跨域请求。下面给你几个实用的解决方案,按推荐程度排序:

1. 直接在Rasa Core启动命令中启用CORS(最简单直接)

Rasa Core的服务器命令本身就支持--cors参数,可以直接指定允许的域名。你只需要修改启动命令,添加这个参数即可:

python3 -m rasa_core.server -d models/dialogue -u models/nlu/default/current -o out.log --cors "*"
  • 用"*"表示允许所有域名的请求,适合开发阶段快速测试;
  • 生产环境建议指定你的Angular前端域名,比如--cors "http://your-angular-app-domain.com",这样更安全,避免任意网站都能调用你的API。

2. 使用Nginx反向代理(生产环境推荐)

如果你的部署架构里有Nginx这类反向代理服务器,也可以通过Nginx来处理CORS请求,同时还能隐藏Rasa的5005端口,提升安全性。

在Nginx的配置文件里添加如下片段:

server {
    listen 80;
    server_name my.very.own.server;

    location /webhooks/rest/webhook {
        # 转发请求到Rasa Core服务器
        proxy_pass http://localhost:5005/webhooks/rest/webhook;
        
        # 添加CORS相关响应头
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        add_header Access-Control-Allow-Headers "Content-Type";

        # 处理OPTIONS预检请求
        if ($request_method = OPTIONS) {
            return 204;
        }
    }
}

修改完成后重启Nginx,然后你的Angular前端就可以请求http://my.very.own.server/webhooks/rest/webhook,而不是直接访问5005端口,跨域问题就解决了。

3. Angular开发环境代理(仅开发阶段用)

如果你只是在本地开发调试,不想改动Rasa或服务器配置,可以用Angular自带的代理功能绕过跨域限制。

  1. 在Angular项目根目录创建proxy.conf.json文件,内容如下:
{
    "/webhooks/rest/webhook": {
        "target": "http://my.very.own.server:5005",
        "secure": false,
        "changeOrigin": true
    }
}
  1. 启动Angular项目时指定代理配置:
ng serve --proxy-config proxy.conf.json

这样前端发出的/webhooks/rest/webhook请求会被自动代理到Rasa服务器,浏览器就不会触发跨域报错了。不过这个方法只适合开发阶段,生产环境还是建议用前两种方案。

补充一下:Postman之所以能正常请求,是因为它作为客户端工具不会执行浏览器的同源策略检查,而浏览器会严格验证跨域请求的CORS头,所以才会出现这种差异。

内容的提问来源于stack exchange,提问作者Uzair A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:18:52