使用Iframe 内嵌Dataiku 报表跨域的配置

什么是CORS?

跨域资源共享(CORS)是一种机制,允许网页应用从不同的域请求资源。在浏览器中,由于同源策略的限制,通常不允许跨域请求。CORS通过在HTTP响应头中添加一些特定的字段,来允许跨域请求。

Nginx-基础跨域配置

nginx 复制代码
server {
    listen 80;
    server_name your_domain.com;

    location / {
        add_header Access-Control-Allow-Methods *;
        add_header Access-Control-Max-Age 3600;
        add_header Access-Control-Allow-Origin *; 
        add_header Access-Control-Allow-Headers $http_access_control_request_headers;
    }
}
  • Access-Control-Allow-Methods: 指定在实际的请求中允许的方法。这里设置为*表示允许任何方法,你也可以指定具体的HTTP方法,比如GET, POST等。
  • Access-Control-Max-Age: 指定预检请求的有效期(以秒为单位)。在这个例子中,设置为3600秒,即1小时。
  • Access-Control-Allow-Credentials: 指定是否允许发送Cookie。设置为true表示允许。
  • Access-Control-Allow-Origin: 指定允许的源。这里使用*表示允许任意的源,也可以设置为具体的域名。
  • Access-Control-Allow-Headers: 指定在实际请求中允许的头部。这里使用$http_access_control_request_headers表示允许来自请求中的Access-Control-Request-Headers头的值。
  • 如果请求方法是OPTIONS,则返回200。这是预检请求的响应。

Dataiku-Nginx的跨域配置

/home/dss/dss-home/install-support/nginx.conf 修改如下配置

nginx 复制代码
   location ^~ /dip/ {
        add_header Access-Control-Allow-Methods *;
        add_header Access-Control-Max-Age 3600;
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Allow-Origin $http_origin; 
        add_header Access-Control-Allow-Headers $http_access_control_request_headers;
        
        if ($request_method = OPTIONS) {
             return 200;
        }
        
        proxy_pass http://127.0.0.1:11201/dip/;
        }
  • add_header Access-Control-Allow-Credentials: 带Cookie的请求需要加上这个字段,并设置为true
  • add_header Access-Control-Allow-Origin: 动态获取请求客户端请求的域, 这里使用$http_origin , 不用 * 是因为带Cookie的请求不支持*
  • OPTIONS 预检命令,只有预检命令通过时才发送请求

Iframe 内嵌请求

在默认情况下,跨域请求不会发送凭证信息(如 Cookie、HTTP认证等)

  1. 发送登录请求
vue 复制代码
const response = await fetch(dataikuUrl + '/dip/api/login' + '?login=' + admin  + '&password=' + password, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'User-Agent': 'MyDataikuClient/1.0'
      },
      credentials: 'include'
    });

credentials: 'include' 表示在跨域请求中包括凭证信息,比如在跨域请求中携带 Cookie。为了允许这些信息在跨域请求中传递,需要设置 credentials'include'

  1. 添加iframe
vue 复制代码
<div>
   <iframe :src="http://your_domain.com:11200/projects/data_processor/dashboards/YRS5QEA_/view/5gqatVO?fullScreen=true" width="100%" height="100px" ></iframe>
</div>
相关推荐
Setsuna_F_Seiei2 小时前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财4 小时前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
郑州光合科技余经理4 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡5 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
yume_sibai6 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
计算机魔术师7 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy1287 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
计算机魔术师8 小时前
CEO说要慢下来,黑客说别做梦了——同一篇论文,两种命运
前端
kyriewen8 小时前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员
IT_陈寒9 小时前
Java里用Stream.parallel()翻车实录,这性能还不如单线程
前端·人工智能·后端