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
集成服务器托管模型、自然语言移动与有界抓放、内置 LeKiwi URL 导入和双摄像头;同步部署契约与指定域名 iframe 白名单,保留原有物理安全、会话及调用预算防护。 更新 npm 包及锁文件版本、CHANGELOG 与发布文档。提交前 typecheck、120 项定向前端测试和 44 项后端测试通过(3 项可选跳过);真实 v2 云模型抓放仍待单独验收,不包含运行密钥或构建产物。
3.3 KiB
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