这是一个网站图标服务:
支持 favicon.ico 和 apple-touch-icon.png
简洁的 URL API
备用图标生成
提供 Docker 镜像和单个二进制文件下载,方便轻松托管
网站过去要么有 favicon.ico,要么没有。随着 apple-touch-icon.png 的引入,为网站查找“图标”变得更加复杂。此服务用于查找网站图标,并在必要时生成图标。
此端点始终返回给定网站的图标图像——如果可能,它会重定向到官方图标;如果需要,它会创建并返回一个备用图像。
| 参数 | 示例 | 描述 | 默认值 |
|---|---|---|---|
| url | http://yelp.com | 必填 | |
| size | 32..50..100 | 期望的尺寸范围(最小..完美..最大) 如果找不到尺寸为 perfect..max 或 perfect..min 的图像,则会生成一个备用图标。 | 必填 |
| formats | png,ico | 以逗号分隔的可接受图像格式列表:png、ico、gif、jpg | gif,ico,jpg,png,svg |
| fallback_icon_url | HTTP 图像 URL | 如果提供此参数,则在找不到合适的图标时,将重定向到此图像。这将覆盖默认的备用图像行为。 | |
| fallback_icon_color | ff0000 | 如果提供此参数,则在找不到任何图标颜色时,字母图标将使用提供的十六进制值着色,而不是灰色。 |
此端点返回指定网站的所有图标。
| 参数 | 示例 | 描述 | 默认值 |
|---|---|---|---|
| url | http://yelp.com | 必填 | |
| formats | png,ico | 以逗号分隔的可接受图像格式列表:png、ico、gif、jpg | png,ico,gif,jpg |
https://besticon-demo.herokuapp.com/allicons.json?url=github.com
https://besticon-demo.herokuapp.com/allicons.json?url=github.com&formats=png
我尽力使这个图标实用,但请注意,它存在一些已知限制:
欢迎在 https://github.com/mat/besticon/issues 提交其他错误报告并提供帮助。
以下是一些简单的托管选项,例如:
Render:https://render.com/deploy?repo=https://github.com/mat/besticon
Heroku:https://heroku.com/deploy
Google Cloud Run:https://deploy.cloud.run
Docker 镜像可在 https://hub.docker.com/r/matthiasluedtke/iconserver/ 获取,该镜像基于本仓库中的 Dockerfile 生成。我会尽量在每个版本发布时更新该镜像。
请注意,此 Docker 镜像并未用于运行 https://besticon-demo.herokuapp.com,因此未经充分测试。
Prometheus 指标已在 /metrics 下公开。基于这些指标的 Grafana 仪表盘配置位于 grafana-dashboard.json。
部分操作系统的二进制文件可从 https://github.com/mat/besticon/releases/latest 下载。
如果您的系统已安装 Go,则可以使用 go get 获取源代码并构建服务器:
$ go get -u github.com/mat/besticon/v3/...
如果您想为其他目标操作系统构建可执行文件,可以添加 GOOS 和 GOARCH 环境变量:
$ GOOS=linux GOARCH=amd64 go get -u github.com/mat/besticon/v3/...
要使用默认端口 8080 启动服务器,只需执行以下命令:
$ iconserver
要使用其他端口,请使用:
$ PORT=80 iconserver
要监听其他地址(例如 localhost),请使用:
$ ADDRESS=127.0.0.1 iconserver
要启用 CORS 标头,您需要设置 CORS_ENABLED=true。您还可以选择设置其他环境变量,这些变量将作为选项传递给rs/cors 中间件。
$ CORS_ENABLED=true iconserver
现在,当您打开 http://localhost:8080/icons?url=instagram.com 时,您应该会看到类似以下内容:

配置项不多,但需要设置以下环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
ADDRESS |
HTTP 服务器监听地址 | 0.0.0.0 |
CACHE_SIZE_MB |
groupcache 的大小,设置为 0 可禁用 | 32 |
CORS_ENABLED |
启用 rs/cors 中间件 | false |
CORS_ALLOWED_HEADERS |
以逗号分隔,传递给中间件的 CORS 标头 | |
CORS_ALLOWED_METHODS |
以逗号分隔,传递给中间件的 CORS 方法 | |
CORS_ALLOWED_ORIGINS |
逗号分隔,传递给中间件 | |
CORS_ALLOW_CREDENTIALS |
布尔值,传递给中间件 | |
CORS_DEBUG |
布尔值,传递给中间件 | |
DISABLE_BROWSE_PAGES |
布尔值,如果为 true,服务器将不提供任何 HTML 页面 | false |
HOST_ONLY_DOMAINS |
* | |
HTTP_CLIENT_TIMEOUT |
HTTP 请求超时时间。支持毫秒 (ms)、秒 (s)、分钟 (m) 等单位。 | 5 秒 |
HTTP_MAX_AGE_DURATION |
所有动态生成的 HTTP 响应的缓存持续时间。支持毫秒 (ms)、秒 (s)、分钟 (m) 等单位。 | 720 小时(30 天) |
HTTP_USER_AGENT |
HTTP 请求使用的用户代理 | iPhone 用户代理字符串 |
METRICS_PATH |
Prometheus 指标的服务器路径。设置为 disable 可禁用 Prometheus 指标 |
/metrics |
POPULAR_SITES |
/popular 页面使用的域名列表(以逗号分隔) | 一些随机网站 |
PORT |
HTTP 服务器端口 | 8080 |
SERVER_MODE |
设置为 download 可通过 besticon 代理下载,设置为 redirect 则允许浏览器直接下载。(示例见 #40) |
redirect |
MIT 许可证 (MIT)