调试网站
curl -I http://127.0.0.1:6000
curl 返回 200,说明服务器完全正常,页面能取到。问题在浏览器那一侧。
最可能的原因:用错了浏览器窗口
如果你是在 Trae 里的内嵌预览/云端浏览器里输这个地址,那大概率打不开——那个浏览器跑在远端沙箱里,访问不到你 Windows 本机的 localhost:6000。
👉 请换成你电脑上本地的 Chrome / Edge,在地址栏手动输入:
http://127.0.0.1:6000
注意几点:
- 必须是
http://,不能是https:// - 不要带斜杠之外的奇怪后缀
- 换无痕窗口试一次(排除缓存和代理插件干扰)
其他两个常见坑
1. 浏览器代理设置 如果你装了 SwitchyOmega、Clash 之类的代理,localhost 可能被转发出去。在代理插件里把 127.0.0.1 / localhost 加进直连白名单,或直接关掉代理试。
2. Chrome 的「始终使用安全连接」 Chrome 设置 → 隐私和安全 → 安全 → 关掉「始终使用安全连接(HTTPS-First Mode)」,否则它可能把 http 强转成 https 导致失败。
帮我确认一下
浏览器打开时,具体显示的是什么?
ERR_CONNECTION_REFUSED(连接被拒绝)→ 多半是你访问的地址/端口不对,或浏览器在远端ERR_EMPTY_RESPONSE/ERR_CONNECTION_RESET→ 代理或防火墙干扰- 白屏、页面打不开但没报错 → 可能是 JS 报错,按 F12 看 Console
- 404 / 目录列表 → 服务根目录不对(但你 curl 拿到 2900 字节 HTML,说明目录是对的)
其实可以不用服务器
这个项目零依赖,直接双击 doukyusei-engine 文件夹里的 index.html 就能玩。只有「存档」功能在 file:// 下可能受限——如果你只是先看看画面和操作,双击就够了。
告诉我浏览器里具体的报错文字,我就能定位到底是哪一环。
Answer: 端口 6000 被 Chrome 列入不安全端口黑名单(原来是 X11 图形服务的端口),所以直接拦截,跟你的服务无关。
找到原因了:端口 6000 被 Chrome 拉黑了。
ERR_UNSAFE_PORT 是浏览器主动拦截,不是你的服务有问题。6000 端口原本是 X11 图形服务的端口,Chrome/Edge 把它列进了「不安全端口」黑名单,直接禁止访问。
解决办法:换个端口
在终端按 Ctrl+C 停掉,改用 8000:
python -m http.server 8000 --bind 127.0.0.1
然后打开:
http://127.0.0.1:8000
可用的安全端口(随便挑一个)
| 端口 | 说明 |
|---|---|
| 8000 | 最常用,推荐 |
| 8080 | 也常见 |
| 5500 | VS Code Live Server 默认 |
| 3000 | Node 项目常用 |
⚠️ 别再用的:6000(X11)、6665-6669(IRC)等都被 Chrome 屏蔽了。
换 8000 应该立刻就能打开。
原理
Chrome/Edge 内置一份「禁用端口黑名单」,访问这些端口直接 ERR_UNSAFE_PORT,跟服务是否在跑无关。
黑名单(Chrome/Edge 共用)
list...
安全区
1024–65535 里,排除上面那些,基本都能用。推荐常用端口。
怎么查某端口行不行
3 种方法:
- 直接试 —— ERR_UNSAFE_PORT 就是被禁。
- 查 Chrome 源码列表(net/base/port_util.cc 的 kRestrictedPorts)
- 用固定推荐端口,不用查。
怎么查本机端口是否被占用
Windows: netstat -ano | findstr :8000 或 PowerShell: Get-NetTCPConnection -LocalPort 8000
Also mention Safari similar list, Firefox只禁少量.
Write it. 浏览器的"不安全端口"是内置写死的黑名单,不是动态算出来的。Chrome / Edge / Safari 都有一份,命中就报 ERR_UNSAFE_PORT。
一、Chrome/Edge 的黑名单(完整版)
1, 7, 9, 11, 13, 15, 17, 19, 20, 21, 22, 23, 25, 37, 42, 43, 53, 69,
77, 79, 87, 95, 101-104, 109-111, 113, 115, 117, 119, 123, 135, 137,
139, 143, 161, 179, 389, 427, 465, 512-515, 526, 530-532, 540, 548,
554, 556, 563, 587, 601, 636, 989, 990, 993, 995, 1719, 1720, 1723,
2049, 3659, 4045, 4190, 5060, 5061, 6000, 6566, 6665-6669, 6679, 6697,
10080
这些端口原本都属于别的协议(X11、SMTP、FTP、Telnet、IRC、SMB…),浏览器怕被滥用就禁了。
二、所以哪些能用?
规则很简单:1024 ~ 65535 之间,只要不在上面那个列表里,基本都能用。
日常开发推荐这几个(100% 安全):
| 端口 | 用途 |
|---|---|
| 3000 | Node / React 常用 |
| 5000 | 通用(注意别和 Flask 冲突) |
| 5500 | VS Code Live Server |
| 8000 | Python / Django 常用 |
| 8080 | 通用 Web |
| 8888 | Jupyter 常用 |
| 9000 | 通用 |
避开:<1024 的低端口,以及上面那串黑名单。
三、怎么确认某个端口行不行
方法 1:直接试(最快) 浏览器打开 http://127.0.0.1:端口号,看到 ERR_UNSAFE_PORT 就是被禁,ERR_CONNECTION_REFUSED 就是没被禁但没服务在跑(说明端口本身可用)。
方法 2:查官方源码(想确认最新列表) Chrome 的列表写在 src/net/base/port_util.cc 里的 kRestrictedPorts 数组里,搜这个文件名就能看到当前版本的黑名单。
方法 3:不用查 直接固定用 8000 / 8080 / 5500,一劳永逸。
四、顺带:怎么查本机端口有没有被占用
Windows(Git Bash 或 CMD):
netstat -ano | findstr :8000
有输出说明被占用,换一个;没输出说明空闲。
PowerShell:
Get-NetTCPConnection -LocalPort 8000
补充:Firefox 只禁很少几个端口(一般不报这个错);Safari 也有一份类似的黑名单。真正严格的是 Chrome/Edge。
你现在把服务改成 python -m http.server 8000 --bind 127.0.0.1,打开 http://127.0.0.1:8000 就好了。