axios CDN引入实战:jsDelivr与unpkg一行搞定浏览器直用
【免费下载链接】axiosPromise based HTTP client for the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/ax/axios
场景:纯静态页想发请求,不想上构建工具
刚建了一个纯 HTML 的静态页,想发个 HTTP 请求,但不想为此装 Node、配 Webpack 那一套。把 axios 通过 CDN 引入就行,一条<script>标签直接跑起来。jsDelivr 和 unpkg 两条路下面都走一遍,代码全部可直接复制。
一分钟搞懂:CDN引入 axios 到底省了哪一步
- axios 是一个基于 Promise 的 HTTP 客户端,浏览器和 Node 都能用,GET、POST、拦截器这些常用能力都有
- 常规用法是
npm install axios再经构建工具打包;CDN引入就是跳过这一步 - 原理:两个 CDN 都按 npm 包分发,路径同为
dist/axios.min.js,加载后挂在window.axios - 本仓库当前主线版本是 1.19.0,后文示例统一锁这个版本
动手实操:两条路径走一遍
jsDelivr:一行引入,国内访问快不少
基础引入(最新稳定版):
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>锁版本写法——别用 latest,线上项目锁死版本号:
<script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js"></script>最小可运行完整示例(含 GET、POST 和错误处理),保存为index.html双击浏览器打开即可:
<!doctype html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>axios CDN引入示例</title> </head> <body> <h1>GET 结果</h1> <pre id="get-result">加载中…</pre> <h1>POST 结果</h1> <pre id="post-result">加载中…</pre> <!-- jsDelivr 引入,锁定版本 1.19.0 --> <script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js"></script> <script> // GET:取一条用户数据 axios.get('https://jsonplaceholder.typicode.com/users/1') .then(function (res) { document.getElementById('get-result').textContent = JSON.stringify(res.data, null, 2); }) .catch(function (err) { // 网络错误、超时都会走这里 document.getElementById('get-result').textContent = 'GET 失败:' + err.message; }); // POST:提交一条 JSON axios.post('https://jsonplaceholder.typicode.com/posts', { title: 'CDN示例', body: '通过 jsDelivr 引入的 axios 发出的 POST' }) .then(function (res) { document.getElementById('post-result').textContent = 'POST 成功,服务器回显:\n' + JSON.stringify(res.data, null, 2); }) .catch(function (err) { document.getElementById('post-result').textContent = 'POST 失败:' + err.message; }); </script> </body> </html>unpkg:一行引入,写法略有不同
基础引入:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>锁版本写法:
<script src="https://unpkg.com/axios@1.19.0/dist/axios.min.js"></script>完整示例换成 unpkg,页面改成按钮触发 POST,结构上换一种写法让你对比:
<!doctype html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>axios unpkg 引入示例</title> </head> <body> <h1>GET 结果</h1> <pre id="get-result">加载中…</pre> <button id="send">发送 POST</button> <h1>POST 结果</h1> <pre id="post-result">等待点击…</pre> <!-- unpkg 引入,锁定版本 1.19.0 --> <script src="https://unpkg.com/axios@1.19.0/dist/axios.min.js"></script> <script> // 页面加载时先发一个 GET axios.get('https://jsonplaceholder.typicode.com/users/1') .then(function (res) { document.getElementById('get-result').textContent = JSON.stringify(res.data, null, 2); }) .catch(function (err) { document.getElementById('get-result').textContent = 'GET 失败:' + err.message; }); // 点击按钮才发 POST document.getElementById('send').onclick = function () { axios.post('https://jsonplaceholder.typicode.com/posts', { title: 'unpkg 测试' }) .then(function (res) { document.getElementById('post-result').textContent = 'POST 成功:' + JSON.stringify(res.data, null, 2); }) .catch(function (err) { document.getElementById('post-result').textContent = 'POST 失败:' + err.message; }); }; </script> </body> </html>两个页面都能直接跑通,先跑通再优化。
方案横向对比
| 对比维度 | jsDelivr | unpkg |
|---|---|---|
| 全球节点数 | 100+(Cloudflare 网络支撑) | 约 20 个 |
| 国内访问速度 | 较快,国内访问稳定不少 | 一般,高峰期偶有波动 |
| 版本控制 | 支持精确版本号、semver 范围 | 支持精确版本号 |
| 缓存策略 | 版本号 URL 长期缓存,命中率高 | 按资源路径缓存,锁版本后同样稳定 |
| SRI/子资源完整性 | 官方页面可直接给出 integrity 值 | 需自行计算哈希 |
选型建议一句话:面向国内用户优先选 jsDelivr;纯海外项目两者皆可,但无论选哪个都要锁版本。
版本管理与安全加固
为什么必须锁版本
不锁版本时,上游发新版可能引入破坏性变更,你的页面某天突然挂掉。
<!-- 推荐:锁定到具体版本,行为可预期 --> <script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js"></script> <!-- 不推荐:始终拉最新,出问题查不到根因 --> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>SRI 子资源完整性怎么用
SRI 让浏览器校验脚本内容哈希,防止 CDN 被投毒后下发的文件被篡改。
<!-- integrity 值 = 对 axios.min.js 文件内容算 sha256 后的 base64 --> <script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js" integrity="sha256-这里替换为对应版本的真实哈希" crossorigin="anonymous"></script>哈希获取:下载该版本文件后本地算一下即可——
openssl dgst -sha256 -binary axios.min.js | openssl base64 -A备用 CDN 兜底写法
主 CDN 挂了不至于白屏,加载失败就切 unpkg 再试一次:
<script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js"></script> <script> // 主源没加载上 window.axios,就同步补一个备用源 if (!window.axios) { document.write('<script src="https://unpkg.com/axios@1.19.0/dist/axios.min.js"><\/script>'); } </script>踩坑清单:跨域、加载失败、版本冲突
1. 控制台报 CORS 错误
- 现象:请求发出后报
blocked by CORS policy,数据拿不到 - 原因:是目标 API 服务器没返回
Access-Control-Allow-Origin响应头,和 CDN 无关(CDN 只负责托管 axios 库本身) - 解法:让接口服务端加头,Node 侧最小改动:
res.setHeader('Access-Control-Allow-Origin', '*');2. 页面报 axios is not defined
- 现象:
window.axios是 undefined,脚本 404 - 原因:版本号写错(不存在的版本直接 404),或路径少写了
dist/ - 解法:核对版本,并按上文"备用 CDN 兜底"加一层
!window.axios检查
3. 全局变量被多库污染
- 现象:页面同时挂了两个库,axios 行为诡异
- 原因:某个依赖库内部也引入了旧版 axios,互相覆盖全局变量
- 解法:全项目统一锁一个版本,重复依赖只保留一份
4. GET 数据总是旧的
- 现象:后端改了数据,前端刷新还是老数据
- 原因:浏览器对 GET 响应做了缓存
- 解法:请求参数里加时间戳强制绕过:
axios.get('/api/list', { params: { t: Date.now() } });⚠️ 四条里第 1 条最高频:CDN 引入本身不会制造跨域,跨域永远找接口方解决。
进阶:拦截器与自定义配置
CDN 环境拿到的是全局axios,拦截器、自定义实例这些进阶能力照样可用。下面这段演示"请求自动带 token + 响应统一处理 401",直接复制就能用:
<script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js"></script> <script> // 建一个带 baseURL 的自定义实例,后续请求不用写全地址 const api = axios.create({ baseURL: 'https://api.example.com' }); // 请求拦截器:自动附加 Authorization 头 api.interceptors.request.use(function (config) { config.headers.Authorization = 'Bearer ' + (localStorage.getItem('token') || ''); return config; }); // 响应拦截器:401 统一跳登录,其他错误继续抛 api.interceptors.response.use( function (res) { return res; }, function (err) { if (err.response && err.response.status === 401) { location.href = '/login.html'; } return Promise.reject(err); } ); // 业务代码只管发请求 api.get('/me') .then(function (res) { console.log('当前用户:', res.data); }) .catch(function (err) { console.error('请求失败:', err.message); }); </script>要点:用axios.create()隔离配置,业务方代码更干净;拦截器只写一次,全站生效。
30秒回顾
- 一行引入:
<script src="https://cdn.jsdelivr.net/npm/axios@1.19.0/dist/axios.min.js">,加载即用window.axios - unpkg 等价写法:
https://unpkg.com/axios@1.19.0/dist/axios.min.js,面向国内优先选 jsDelivr - 别用 latest:锁版本 + SRI 校验 + 备用 CDN 兜底,三步把生产环境稳下来
- CORS 报错找接口方加响应头;GET 数据旧就加时间戳参数绕缓存
【免费下载链接】axiosPromise based HTTP client for the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/ax/axios
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考