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

如何在Odoo 8服务器中启用CORS以实现Ajax请求?

嘿,我之前刚解决过Odoo 8里的这个CORS跨域问题,给你几个亲测有效的靠谱方案:

方案一:给Odoo添加自定义CORS中间件(推荐,不修改核心源码)

Odoo 8基于Werkzeug框架运行,我们可以通过自定义中间件的方式,给所有响应注入CORS头,同时处理OPTIONS预检请求。

  1. 新建一个简单的Odoo模块(或者用你现有的自定义模块),在模块的__init__.py里添加以下代码:
from openerp.http import Root
from werkzeug.wrappers import Response

# 保存原始的get_response方法
original_get_response = Root.get_response

def cors_enhanced_get_response(self, httprequest, *args, **kw):
    # 先调用原始方法获取响应
    response = original_get_response(self, httprequest, *args, **kw)
    
    # 设置CORS头,生产环境建议替换*为你的前端域名(比如https://your-frontend.com)
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS, PUT, DELETE'
    response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
    
    # 处理OPTIONS预检请求,直接返回200状态
    if httprequest.method == 'OPTIONS':
        return Response(status=200, headers=response.headers)
    
    return response

# 替换原始的get_response方法
Root.get_response = cors_enhanced_get_response
  1. 把这个模块放到Odoo的addons目录下,在odoo.conf里配置好addons_path,然后重启Odoo,安装这个模块即可。
方案二:用Nginx反向代理处理CORS(生产环境首选)

如果你的Odoo是通过Nginx做前端代理的,直接在Nginx配置里添加CORS规则更简单,也更易维护:

在你的Odoo站点Nginx配置的server块里,添加以下内容:

location / {
    # 保留你原有的Odoo代理配置
    proxy_pass http://localhost:8069;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    # 配置CORS头
    add_header Access-Control-Allow-Origin https://your-frontend-domain.com; # 替换为你的前端域名
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT, DELETE';
    add_header Access-Control-Allow-Headers 'Content-Type, Authorization';
    
    # 处理OPTIONS预检请求,直接返回204(无内容)
    if ($request_method = OPTIONS) {
        return 204;
    }
}

修改完后重启Nginx即可生效。注意:生产环境绝对不要用*作为允许的Origin,一定要指定具体的前端域名,避免安全风险。

方案三:修改Odoo核心源码(不推荐,升级会丢失)

如果你只是临时测试,不想搞模块或Nginx,可以直接修改Odoo的核心wsgi文件,但这个方法不推荐,因为升级Odoo时修改会被覆盖:

找到Odoo安装目录下的openerp/service/wsgi_server.py,找到处理响应的部分,添加CORS头。比如在返回响应前加入:

response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS, PUT, DELETE'
response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'

额外注意点

  • 确保你的Ajax请求里的Content-Type和Authorization(如果用了token)头被允许,不然还是会报错;
  • OPTIONS预检请求是浏览器自动发起的,必须处理它返回200/204,否则跨域请求会被拦截;
  • 生产环境一定要限制允许的Origin,不要用通配符*,防止恶意网站请求你的Odoo接口。

内容的提问来源于stack exchange,提问作者Jesus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:53:28