You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何刷新GitHub Personal Access Token解决私有仓库下载链接404问题

问题根源

  1. 点击<a>标签直接跳转download_url时,浏览器的普通GET请求不会自动携带你在fetch API中配置的Authorization请求头,GitHub私有文件的校验不通过就返回404。
  2. GitHub返回的download_url中附带的临时签名token仅对本次API请求的会话有效,直接在浏览器新标签页打开会因会话不匹配失效。
  3. 你代码中配置的origin: "Access-Control-Allow-Origin: *"是错误写法,这是服务端返回的响应头,前端请求中添加该参数完全无效。

解决方案

前端本地测试方案(适用于VS Code Live Server环境)

不要直接使用<a>标签的href属性跳转,改为拦截点击事件,手动携带Authorization头请求文件内容,生成临时本地下载链接,修改代码如下:

  1. 替换原有a标签拼接逻辑:
// 原来拼接<td>Read列的代码替换为:
statusHtml += '<td><a href="javascript:void(0)" data-url="' + status.download_url + '" class="download-btn">Click</a></td>';
  1. 新增下载点击事件监听,放在get()函数外部即可:
$('tbody').on('click', '.download-btn', function() {
  const downloadUrl = $(this).data('url');
  const fileName = $(this).closest('tr').find('td:eq(1)').text();
  const myHeaders = new Headers();
  myHeaders.append("Authorization", "Bearer ghp_***********************"); // 替换为你的PAT

  fetch(downloadUrl, {
    method: 'GET',
    headers: myHeaders
  })
  .then(res => res.blob())
  .then(blob => {
    // 生成临时下载链接触发下载
    const tempUrl = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = tempUrl;
    a.download = fileName;
    document.body.appendChild(a);
    a.click();
    // 清理临时资源
    window.URL.revokeObjectURL(tempUrl);
    document.body.removeChild(a);
  })
  .catch(err => console.log('下载失败:', err));
});

注意事项

  • 前端直接写死PAT的方式仅适合本地测试使用,禁止发布到公网环境,PAT泄露会导致你的仓库权限完全对外开放,存在资产被盗风险。如果需要上线使用,必须新增后端代理层,由后端携带PAT请求GitHub接口再将内容返回给前端。

内容的提问来源于stack exchange,提问作者Marko Dunovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:00:06