一个部署在 Vercel 的极简代理服务,用于转发 raw.githubusercontent.com 文件内容。
目标:
- 保留最小必要鉴权(
nine-token) - 原样透传上游状态码与内容类型
- 使用 Vercel Edge Cache 提高命中率
- Token 鉴权:请求必须带
nine-token - 状态码透传:上游返回什么状态码,就返回什么状态码
- 内容透传:支持文本、图片、二进制文件
- 缓存策略:
- 浏览器缓存:
max-age=300(5 分钟) - Edge 缓存:
s-maxage=3600(1 小时)
- 浏览器缓存:
.
├── api/
│ └── github-raw.js
├── vercel.json
└── README.md
直接将仓库导入 Vercel 即可,无需构建步骤。
当前 vercel.json 重写规则:
/:path*→/api/github-raw.js?path=:path*
含义:访问任意路径时,都会转发到代理函数,并把原路径放到 path 参数。
在 Vercel 项目中配置:
NINE49TOKEN(必填)- 访问令牌;请求中的
nine-token必须与它完全一致
- 访问令牌;请求中的
GITHUB49TOKEN(可选)- GitHub Token;配置后会以
Authorization请求上游,提升限流场景下可用性
- GitHub Token;配置后会以
请求格式:
https://<你的域名>/<owner>/<repo>/<branch>/<file-path>?nine-token=<NINE49TOKEN>
示例:
https://your-app.vercel.app/octocat/Hello-World/master/README?nine-token=YOUR_TOKEN
上面请求会被代理到:
https://raw.githubusercontent.com/octocat/Hello-World/master/README
nine-token不正确或缺失:403 Forbiddenpath为空:400 Bad Request- 其他情况:
- 状态码透传上游
Content-Type透传上游- 若上游未返回
Content-Type,使用application/octet-stream
- 需要通过私有令牌控制访问的 Raw 文件代理
- 需要统一缓存策略、减少重复回源
- 需要稳定转发文本/图片/二进制资源
License 文件已在仓库根目录提供。