# 远端界面加载与模型目录 浏览器 Cookie 按主机名而非端口共享。多个本机 DSH 服务留下的登录 Cookie,与原生合并插件脚本地址相加,可能超过 Node 默认的 16 KiB 请求头限制。请求在路由之前被 HTTP 解析器拒绝,客户端随后回退成多个脚本请求。网关使用有限的 64 KiB 容量,仍验证本机 Host、Origin 和会话认证,不删除其他服务的 Cookie。 同一主机及同一控制器 Origin 的网关端口会保存在私有元数据中,重启时优先复用。这样浏览器的本机缓存与界面偏好仍属于原地址,也减少新增端口 Cookie;遇到端口被占用时另选空闲端口,不接管已有服务。主机身份或控制器 Origin 不同则独立保存。SSH 客户端及本机转发 socket 开启 TCP_NODELAY,减少交互控制包的合并等待;跳板及自定义代理继续按原有传输方式处理。 代码缓存只接收带内容哈希的 `/assets/*.js|css`,以及严格匹配 `/plugins/??.../client.js|css&rev=` 的版本地址;响应必须是 200,并明确携带 `public, max-age=..., immutable`,不得带 Set-Cookie、private/no-store/no-cache 或 Cookie 等身份相关 Vary。缓存保存完整响应的原始压缩字节,保留编码并以 SHA-256 检查本机副本完整性。 缓存按主机身份、DSH 核心版本、完整版本路径和请求压缩格式隔离,在私有 `remote-workspaces/boot-assets` 中原子写入 0600 文件。目录须为 0700。单份上限 12 MiB,总量按 64 MiB 回收最早写入的版本。过期、损坏、不安全权限和不可用磁盘均按未命中处理。每次读取代码缓存之前仍验证网关认证。只有完整结束的响应才可落盘;失败或部分到达的资源不会成为完整缓存。 不会缓存 HTML、原生 API、提供商/模型目录、凭据、消息和用户文件。更新插件或 DSH 时使用其新版本 URL,模型配置始终由实际远端服务读取。第一次没有副本时仍需传输代码;缓存提速针对之后的窗口、网关及本机服务重启。 ## 首次没有缓存时也减少传输 部分原生版本把数 MB 的账户设置 PNG 插图直接编码进 JavaScript,所有聊天页因而需要先下载这些图。包含账户设置模块的版本化脚本由已经选定的远端 Node 一次性读取:在远端本机完成认证、读取不可变脚本,把大 PNG 数据地址改为受保护的按需图片地址,再压缩导出代码。聊天页不再提前传输账户插图。 需要显示插图时,按对应版本源及 SHA-256 从相同原生脚本恢复原始 PNG,逐字节核对后返回。小图标保留;不改远端 DSH 核心或插件文件,不安装远端常驻组件,不修改模型或凭据。每个网关最多同时准备两份资源,失败的导出不重复派发;不支持时保留普通原生静态读取作为兼容路径。 本机代码缓存按变换版本隔离,确保升级后不会混用不同的图片路径约定。图片地址仅描述版本化 SDK 代码和图片哈希,不含会话、认证票据或用户文件路径;每次图片读取仍需网关认证。远端登录仅在远端 Node 内存中完成,不随代码导出。 对 `POST /api/session/modelCatalog` 的完整只读 HTTP 请求设置 15 秒总期限。超时后中止当前传输:尚未返回头时给出 504,部分响应则关闭连接。原生模型选择器的错误/重试状态因 Promise 明确结束而生效。此期限不应用于消息、命令、上传下载、模型切换和其他写入,不自动重发任何请求。 浏览器刷新携带 `If-None-Match` 或 `If-Modified-Since` 时,仍先验证认证并读取同一版本的磁盘缓存。匹配本机表示的 ETag 时直接返回 304;旧标签不匹配则返回完整本机副本。PNG 分离后的代码使用其新内容哈希,不会把旧原生脚本的标签当成已变换代码。`If-Match`、`If-Unmodified-Since` 和 Range 请求继续交由原生服务处理,缓存未命中时也不取消必要的条件语义。