Files
Mujoco_WASM/docs/website-embedding.md
T
chenlin 0d986f60bd
web-platform-ci / Standalone decision service (no cloud credentials) (push) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (push) Has been cancelled
web-platform-ci / Playwright E2E (push) Has been cancelled
lekiwi-compatibility / cpu-compatibility (push) Has been cancelled
feat: release v1.0.2 LeKiwi 语言控制与网站嵌入
集成服务器托管模型、自然语言移动与有界抓放、内置 LeKiwi URL 导入和双摄像头;同步部署契约与指定域名 iframe 白名单,保留原有物理安全、会话及调用预算防护。

更新 npm 包及锁文件版本、CHANGELOG 与发布文档。提交前 typecheck、120 项定向前端测试和 44 项后端测试通过(3 项可选跳过);真实 v2 云模型抓放仍待单独验收,不包含运行密钥或构建产物。
2026-09-24 15:29:49 +08:00

3.3 KiB

网站 iframe 嵌入

2026-09-24 已为 https://cadworld.robotquan.com 开放嵌入。

同事网站接入

<iframe
  src="https://cadworld-sim.robotquan.com/"
  title="CADWorld Sim"
  style="width: 100%; height: 900px; border: 0;"
  allow="fullscreen"
  allowfullscreen
></iframe>

如需自动加载内置机器人,可使用 https://cadworld-sim.robotquan.com/?robot=lekiwi-v1。加载不会自动发起模型推理。

  • 若父页面自身有 CSP,须在其 frame-src 中允许 https://cadworld-sim.robotquan.com。
  • 默认不用 sandbox。若同事必须使用 sandbox,请至少评估 allow-scripts allow-same-origin:缺少脚本权限无法运行应用,缺少真实来源会导致同源请求/会话失效;下载等能力需按实际需求额外授权。
  • 白名单仅包含精确 HTTPS 来源,不包含 HTTP、非默认端口、其他子域名或任意 www 前缀。多层嵌套时,每一层祖先都必须匹配白名单。
  • 此设置允许展示和在 iframe 内操作,不授权父页面直接读取 iframe DOM 或调用模型 API。父子页面消息接口未实现。

响应头与会话

已移除 X-Frame-Options: DENY,未改成仍会阻止跨来源嵌入的 SAMEORIGIN,也不使用已废弃的 ALLOW-FROM。CSP 的其他指令不变,仅调整为:

frame-ancestors 'self' https://cadworld.robotquan.com;

两个 HTTPS 站点属于相同 schemeful site https://robotquan.com,因此沿用 host-only、Secure、HttpOnly、SameSite=Strict 会话 Cookie。API Origin、Fetch Metadata、CSRF 和 CORS 限制不放宽。iframe 自身发出的同源请求通过,父页面直接访问 API 仍被拒绝。

发布与验证

本次为 OpenResty 响应头热更新,标识 20260924T071933Z-iframe。未重启后端,前后容器 ID 和启动时间相同;应用版本仍为 20260924T065821Z-language-v2。

  • 本地 deploy/cadworld/openresty.conf 同步更新,未来新发布包会保留该白名单。
  • 更新前后配置与备份位于服务器 /opt/cadworld-sim/config-updates/20260924T071933Z-iframe/,旧配置为 previous.conf。
  • 已执行 nginx -t、reload、公网响应头与浏览器测试。3/3 通过:精确允许来源及安全头;允许来源内加载真实线上应用、会话建立/读取/销毁和 CSRF 防护;未授权同站子域名被 CSP 拒绝。
  • 浏览器测试只合成指定来源的父页面 HTML,iframe 及 API 均访问真实网站;没有修改同事网站,也不代表已经验证其实际页面的 CSP/sandbox 等设置。
  • 未触发付费推理。证据:build/website-deployment/iframe-20260924T071933Z/。
CADWORLD_PRODUCTION_TEST=1 npx playwright test \
  -c web_platform/playwright.production.config.ts website.embed.production.spec.ts \
  --output=build/website-deployment/iframe-20260924T071933Z/browser

旧发布包及其 manifest 没有被修改。重新发布原始旧包会覆盖热更新的头设置;应使用更新后的源码重新构建发布,或重新应用已验证的头配置。

仅回滚本次响应头(目标主机):

cp -p /opt/cadworld-sim/config-updates/20260924T071933Z-iframe/previous.conf \
  /opt/1panel/apps/openresty/openresty/conf/conf.d/cadworld-sim.robotquan.com.conf
docker exec 1Panel-openresty-m72w nginx -t && \
  docker exec 1Panel-openresty-m72w nginx -s reload