BrowserProxy 是 ZerOS 内置浏览器的后端代理服务,用于代理外部网页请求,绕过 X-Frame-Options、CSP frame-ancestors 等 iframe 限制,使 ZerOS 内置浏览器能够加载各类网站。
system/service/BrowserProxy.phpD:/application/browser/ 内置浏览器应用、x-frame-bypassGET /system/service/BrowserProxy.php?url=<目标URL>
POST /system/service/BrowserProxy.php?url=<目标URL>
| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| url | string | 是 | 目标站点 URL,仅允许 http/https。支持被多次编码的 URL(服务端会尝试解码) |
GET 与 POST 请求转发POST 将转发请求体,并尽量保持原始 Content-TypeUser-Agent、Accept、Accept-Language 与部分 Client Hints),降低目标站因请求头过少而返回 400 的概率Content-Typehref、src、action、CSS 的 url() 等),使后续资源继续通过代理加载<base href="目标站 origin/">,便于相对路径解析| 功能 | 说明 |
|------|------|
| GET/POST 代理 | 支持 GET 与 POST,转发请求体与 Content-Type |
| HTML 重写 | 对 HTML 中的 href、src、action、url() 等重写为代理 URL |
| base 注入 | 注入 <base href="目标站 origin/"> 便于相对路径解析 |
| CSP 修正 | 将 body 中的 CSP meta 移至 head,消除控制台警告 |
| data: 过滤 | 拒绝含 data:、javascript: 的 URL,避免无效代理 |
http://、https:// 协议data:、javascript: 等非 HTTP(S) scheme代理请求会附带常见浏览器头,包括 User-Agent、Accept、Accept-Language 及 Sec-CH-UA 等 Client Hints,以降低目标站返回 400 的概率。
200:代理成功返回400:参数错误(缺少 url、URL 不合法或协议不被允许)502:目标站请求失败(网络错误、超时、目标站拒绝连接等)/system/service/BrowserProxy.php?url=https%3A%2F%2Fexample.com%2F
POST /system/service/BrowserProxy.php?url=https%3A%2F%2Fexample.com%2Fapi%2Flogin
Content-Type: application/json
{"username":"demo","password":"demo"}
iframe.src 使用代理 URL 加载页面localhost、127.0.0.1、私有网段与云元数据地址的请求。SystemInformation.getBrowserProxyPath() // 代理路径,如 '/system/service/BrowserProxy.php'
SystemInformation.getBrowserProxyUrl() // 代理完整 URL
SystemInformation.SERVICE_NAMES.BROWSER_PROXY // 'BrowserProxy'