f0d79638c910c7a4d24f38b428779ad5b7c6281a
Favicon 代理 API(Cloudflare Pages)
通过 HTTP API 代理获取任意网站的 favicon,解决国内无法直连部分站点的问题。
使用 Google、DuckDuckGo 与 直连目标站 三路同时请求,谁先成功返回就用谁。
说明:Bing 没有公开的 favicon 接口,因此第二源使用 DuckDuckGo;直连目标站(如
https://域名/favicon.ico)作为第三路,真正起到“代理访问被墙站”的作用。
接口说明
- 方法:
GET - 路径:
/api/favicon - 参数:
url/domain/u(必填):目标网站完整 URL 或域名,如https://twitter.com或github.comsize(可选):图标尺寸 16–256,默认 128(仅对 Google 源生效)
示例
# 使用 url 参数
curl -o favicon.ico "https://你的 Pages 域名/api/favicon?url=https://twitter.com"
# 使用 domain 参数
curl -o favicon.ico "https://你的 Pages 域名/api/favicon?domain=github.com&size=64"
前端使用:
<img src="https://你的 Pages 域名/api/favicon?url=https://example.com" alt="favicon" width="32" height="32" />
部署到 Cloudflare Pages
方式一:通过 Wrangler CLI
-
安装 Wrangler:
npm install -g wrangler -
登录 Cloudflare:
wrangler login -
在项目根目录部署:
wrangler pages deploy . --project-name=cf-favicon首次会提示创建项目,之后会得到
https://cf-favicon.pages.dev这类地址。
方式二:通过 Git 连接(推荐)
- 将本仓库推送到 GitHub/GitLab。
- 在 Cloudflare Dashboard → Workers & Pages → Create → Pages → Connect to Git。
- 选择仓库,构建配置:
- Build command: 留空(无构建步骤)
- Build output directory:
/或.(根目录即为静态资源)
- 保存并部署。
部署完成后 API 地址为:https://你的项目名.pages.dev/api/favicon?...
项目结构
cf-favicon/
├── functions/
│ └── api/
│ └── favicon.js # Favicon 代理 API 实现
├── public/
│ └── favicon.ico # 可选:默认图标,当所有外部源都失败时返回此文件
├── index.html # 简单说明页(可选)
├── wrangler.toml # 可选,用于 wrangler 部署
└── README.md
行为说明
- 请求会同时发往 Google、DuckDuckGo、目标站 /favicon.ico 以及 目标站首页 HTML 中的 <link rel="icon">(支持 ico/png/jpg/webp/svg 等),采用“先成功先返回”,减少单点失败。
- 回退:若三路均失败,会尝试返回
public/favicon.ico;若该文件存在则返回 200 并带响应头X-Favicon-Fallback: true,否则返回 502。 - 运行在 Cloudflare 边缘,请求从 CF 出去,相当于代理访问,适合在国内环境调用以获取国外站点的 favicon。
- 成功时返回图片二进制和
Cache-Control: public, max-age=86400;失败时返回 400/502 及 JSON 错误信息。
License
MIT
Description
Languages
JavaScript
75.8%
HTML
24.2%