requestProxy 是 Five 初始化时的关键参数,用于在发起网络请求前对 URL 进行拦截和修改,常用于鉴权、资源重定向或 CDN 域名替换。(url: string) => string | Promise<string>FiveInitArgs.requestProxy。Definition: FiveInitArgs
interface FiveInitArgs {
/**
* 请求代理函数
* @description 在 Five 内部发起任何网络请求(如加载图片、模型、配置)之前调用。
* @param url - 原始请求 URL
* @returns 修改后的 URL (string) 或异步返回修改后的 URL (Promise<string>)
*/
requestProxy?: (url: string) => string | Promise<string>;
}
Five 内部加载资源(全景图瓦片、3D 模型、纹理贴图等)时,会通过统一的 Fetcher 层发起请求。requestProxy 钩子函数会在每次请求发起前被触发。
http 协议升级为 https。requestProxy 是 Five 构造函数的配置项之一。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
requestProxy |
(url: string) => string | Promise<string> |
undefined |
代理函数,返回修改后的 URL。支持同步或异步返回。 |
将图片资源请求分散到不同的 CDN 节点,加速加载。
const five = new Five({
requestProxy: (url) => {
// 简单的字符串替换示例
return url.replace('//vrlab-public.ljcdn.com/', '//vr-public.realsee-cdn.cn/');
}
});
对于需要动态获取 Token 的场景,可以使用 Promise 异步返回 URL。
const five = new Five({
requestProxy: async (url) => {
// 仅对私有桶资源进行签名
if (url.includes('private-bucket')) {
const token = await fetchToken(); // 假设 fetchToken 是一个获取鉴权的异步函数
const separator = url.includes('?') ? '&' : '?';
return `${url}${separator}token=${token}`;
}
return url;
}
});
在开发阶段,将特定资源重定向到本地文件。
const proxyMap: Record<string, string> = {};
const five = new Five({
requestProxy: (url) => {
// 如果该 URL 在映射表中存在(例如通过 <input type="file"> 加载的本地 Blob URL),则使用映射值
if (proxyMap[url]) {
console.log(`[Proxy] Redirecting ${url} -> ${proxyMap[url]}`);
return proxyMap[url];
}
return url;
}
});
requestProxy 内部再次发起会导致 requestProxy 触发的 Five 资源请求,否则可能导致递归调用。requestProxy 会在所有资源请求前触发(包括成百上千个瓦片请求)。请确保该函数执行效率极高,避免进行耗时的同步操作。如果是异步操作,应做好缓存。? 还是 &。tags: [请求代理, 鉴权, 域名替换, 私有化, 请求拦截, configuration, network, proxy, authentication, CDN, token, url-rewrite, cors]