如何为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自带的代理功能绕过跨域限制。
- 在Angular项目根目录创建
proxy.conf.json文件,内容如下:
{ "/webhooks/rest/webhook": { "target": "http://my.very.own.server:5005", "secure": false, "changeOrigin": true } }
- 启动Angular项目时指定代理配置:
ng serve --proxy-config proxy.conf.json
这样前端发出的/webhooks/rest/webhook请求会被自动代理到Rasa服务器,浏览器就不会触发跨域报错了。不过这个方法只适合开发阶段,生产环境还是建议用前两种方案。
补充一下:Postman之所以能正常请求,是因为它作为客户端工具不会执行浏览器的同源策略检查,而浏览器会严格验证跨域请求的CORS头,所以才会出现这种差异。
内容的提问来源于stack exchange,提问作者Uzair A.
相关产品推荐
相关产品推荐

