1. 本地调试为什么非要 HTTPS,以及 live-server 的坑在哪
前端在本地跑页面,多数时候http://127.0.0.1:5500就够了。但有些场景绕不过 HTTPS:比如你在做 WebRTC 的getUserMedia、Service Worker 注册、Secure Context相关的 API(剪贴板、地理位置、通知),或者页面里要请求一个只允许 HTTPS 的第三方接口,再或者你在调 OAuth 回调、Cookie 的Secure属性。这些在 HTTP 下要么直接报错,要么行为不一致,等到上线才发现问题就晚了。
VSCode 里的 live-server 插件(Live Server)是很多人本地起静态服务的首选,点一下右下角 Go Live 就能热更新。但它默认只跑 HTTP,想开 HTTPS 得手动配证书。而配证书这件事,卡人的地方往往不是「不会配」,而是三个具体痛点:一是端口不固定,每次重启端口变了,证书里的域名/IP 对不上;二是自签证书生成后浏览器一直红锁,不知道该不该信;三是调试期接口调用散落在各个文件里,Key 到处复制,换一个环境就要改一遍。
这篇就围绕这三个痛点来。前半段把 live-server 的 HTTPS 骨架搭起来,settings.json 和证书配置直接可复制;后半段讲怎么用 TaoToken 的统一 Key/API 通道,把调试期的接口调用收口到一处,避免 Key 满天飞。适合已经在用 VSCode 做前端、需要本地 HTTPS 环境、又不想把接口密钥写死在代码里的同学。
2. 前置准备:固定端口、证书文件与 TaoToken 统一 Key 通道
2.1 固定端口是证书能用的前提
自签证书是绑定到具体地址的。你给127.0.0.1:8888签的证书,拿到127.0.0.1:5501上用,浏览器照样报错。所以第一步不是生成证书,而是先把 live-server 的端口钉死。在 VSCode 的settings.json里加一行:
"liveServer.settings.port": 8888端口选 8888 只是习惯,你换成 8443、9443 都行,只要后面证书和访问地址保持一致。改完记得完全重启 live-server(不是刷新页面),端口才会生效。
2.2 生成自签证书
自签证书的生成方式有好几种,用在线工具或者本地 openssl 都可以。核心是拿到两个文件:证书文件(.cert或.crt)和私钥文件(.key)。生成时把 Common Name(CN)填成127.0.0.1,这样证书和你的访问地址匹配。
如果你用在线工具生成,下载下来通常是一个.cer文件加一个.key文件。注意.cer和.cert只是扩展名不同,内容都是 PEM 格式的证书,把.cer改名成.cert即可,live-server 认.cert。把两个文件放到项目里一个固定目录,比如项目根下的certs/,路径别带中文和空格,Windows 下尤其注意反斜杠转义。
2.3 TaoToken 统一 Key 通道解决什么问题
调试期最烦的是接口调用。你本地页面要请求模型接口、要调后端 API,Key 写在.env里、写在config.js里、写在请求头里,三份不同步。TaoToken 的思路是给你一个统一的 Key 和统一的 API 入口,调试期所有请求都走这一个通道,换环境只改一个 base URL 和一把 Key。
它的 API 入口是https://taotoken.net/api,控制台在https://taotoken.net/console,Key 在https://taotoken.net/api-keys管理。你可以在控制台里建一把调试专用的 Key,权限和额度单独控制,用完随时吊销,不会影响生产环境的 Key。这样本地 HTTPS 页面里请求接口时,指向的是同一个通道,证书问题和 Key 管理问题就分开了,各管各的。
3. 可复制的 settings.json 与 live-server HTTPS 配置骨架
3.1 完整的 settings.json 片段
打开 VSCode 的命令面板(Ctrl+Shift+P),输入Open Settings (JSON),在打开的settings.json里加入下面这段。路径部分换成你自己的实际路径:
{ "liveServer.settings.port": 8888, "liveServer.settings.https": { "enable": true, "cert": "D:\\projects\\my-app\\certs\\127.0.0.1.cert", "key": "D:\\projects\\my-app\\certs\\127.0.0.1.key" }, "liveServer.settings.host": "127.0.0.1", "liveServer.settings.root": "/", "liveServer.settings.CustomBrowser": "chrome" }几个参数说明一下。enable必须是true,否则 HTTPS 配置不生效。cert和key是绝对路径,Windows 下用双反斜杠\\或者正斜杠/都行,单反斜杠会被当成转义字符。host设成127.0.0.1,和证书的 CN 对齐。root是服务根目录,一般保持/。
3.2 证书路径的常见写法对照
| 系统 | 路径写法 | 说明 |
|---|---|---|
| Windows | D:\\projects\\certs\\127.0.0.1.cert | 双反斜杠转义 |
| Windows | D:/projects/certs/127.0.0.1.cert | 正斜杠也可 |
| macOS | /Users/you/projects/certs/127.0.0.1.cert | 绝对路径 |
| Linux | /home/you/projects/certs/127.0.0.1.cert | 绝对路径 |
注意:路径里不要出现中文、空格、
#这类字符,live-server 解析路径时容易出问题。项目如果放在 OneDrive 或 iCloud 同步目录里,也建议挪出来,同步进程偶尔会锁住证书文件导致读取失败。
3.3 调试期接口调用指向 TaoToken
在你的前端代码里,把调试期的 API base URL 指向 TaoToken 的 API 入口。比如你用一个config.js管理环境:
// config.js const isDev = location.hostname === '127.0.0.1'; export const API_BASE = isDev ? 'https://taotoken.net/api' : 'https://your-production-api.com'; export const API_KEY = isDev ? '你的调试专用Key' : '生产Key由后端注入';这样本地 HTTPS 页面请求接口时,走的是 TaoToken 的统一通道,Key 只有一把,换环境只改API_BASE。调试专用 Key 在https://taotoken.net/api-keys里建,建议单独命名成local-debug,方便识别和吊销。
4. 验证 HTTPS 是否生效:从重启到浏览器信任
4.1 重启并访问
改完settings.json后,完全关闭 live-server(点右下角 Port 旁边的关闭,或者重启 VSCode),然后重新 Go Live。地址栏输入https://127.0.0.1:8888/,注意是https不是http。
如果配置正确,页面能打开,但地址栏会显示「不安全」或红锁。这是自签证书的正常表现,因为浏览器不信任你自己签的证书。功能上不影响测试,getUserMedia、Service Worker 这些都能正常跑。
4.2 让浏览器信任自签证书
不想每次看到红锁,可以把证书导入系统信任列表。以 Chrome 为例,打开chrome://settings/certificates,在「受信任的根证书颁发机构」里导入你的.cert文件。导入后重启浏览器,红锁会变成正常的锁图标。
macOS 上可以双击.cert文件,在「钥匙串访问」里把它设为「始终信任」。Windows 上双击.cert,选择「安装证书」→「本地计算机」→「受信任的根证书颁发机构」。
注意:自签证书只用于本地调试,不要导入到生产环境或共享给他人。调试专用 Key 同理,用完即吊销。
4.3 用 curl 快速验证
不想开浏览器,可以用 curl 验证服务是否在 HTTPS 上跑:
curl -k -I https://127.0.0.1:8888/-k表示跳过证书校验(因为自签证书 curl 默认不信任)。如果返回HTTP/1.1 200 OK,说明 HTTPS 服务已经起来了。去掉-k会报证书错误,这恰好证明证书确实在起作用。
5. 本篇常见错误排查
5.1 端口被占用
报错EADDRINUSE: address already in use 127.0.0.1:8888,说明 8888 端口被别的进程占了。换一个端口,同时记得重新生成对应地址的证书,或者用netstat -ano | findstr 8888(Windows)/lsof -i :8888(macOS/Linux)找到占用进程结束掉。
5.2 证书路径读取失败
报错ENOENT: no such file or directory,八成是路径写错了。检查三点:路径是不是绝对路径、反斜杠有没有转义、文件名大小写是否一致(Linux 下大小写敏感)。把路径复制到文件管理器里能打开,才算对。
5.3 浏览器提示ERR_SSL_PROTOCOL_ERROR
这个错误通常是证书和私钥不匹配,或者证书格式不对。确认.cert和.key是同一对生成的,别把 A 证书配了 B 私钥。另外确认文件内容是 PEM 格式(以-----BEGIN CERTIFICATE-----开头),如果是 DER 格式需要先转换。
5.4 HTTPS 开了但接口请求失败
页面能打开,但请求 TaoToken 接口时报 CORS 或 401。CORS 的话检查请求头有没有带对,401 的话检查 Key 是否有效、是否在https://taotoken.net/api-keys里被吊销了。调试期建议在浏览器 Network 面板里看具体请求的 URL 和响应,比猜快得多。
5.5 改了配置不生效
live-server 的配置改动后必须完全重启才生效,刷新页面没用。如果重启后还是旧行为,检查是不是有多个settings.json(用户级和工作区级),工作区级的会覆盖用户级。用命令面板的Preferences: Open Workspace Settings (JSON)确认一下。
6. 把调试通道收口:TaoToken 的接入与后续
本地 HTTPS 骨架搭好之后,调试期的接口调用就统一走 TaoToken 了。Key 在https://taotoken.net/api-keys管理,接入文档在https://taotoken.net/doc,里面有各语言的调用示例和参数说明。如果你只是想先验证模型返回是否正常,可以直接用模型对话页面https://taotoken.net/model-chat试一把,不用写代码就能看到响应。
对于长期做编码和 Agent 开发的场景,每次手动配 Key、改 base URL 还是麻烦。TaoToken 的 Coding Plan 页面https://taotoken.net/coding-plan里有针对这类工作流的配置方式,可以把调试通道固化下来,省掉重复配置。控制台https://taotoken.net/console里能看到调用量和额度,调试期用超了也能及时发现。
我自己的习惯是:本地 HTTPS 环境用自签证书 + 固定端口,接口调用全部指向 TaoToken 的统一入口,调试 Key 单独建一把,项目上线前吊销。这样证书问题和 Key 问题互不干扰,出问题的时候排查范围小很多。证书文件记得加进.gitignore,别把私钥提交到仓库里。