避开浏览器端口黑名单:10080 端口引发的 Web 服务访问故障及解决方案
在一次 Web 服务测试中,我突发奇想将端口号指定为 10080,结果网页无论如何都打不开。
让 AI 辅助排查,它也一头雾水,给出的都是“一切正常”的答复。我用 curl 测试,响应确实没问题,但浏览器就是无法访问。

换了不同的机器和浏览器,在 Chrome 中看到的提示如下:

Firefox 给出的错误信息则是:

把 Firefox 的提示截图喂给 AI 后,它终于恍然大悟:

原来,Chrome 和 Firefox 的内部代码中都硬编码了一份受限制的端口黑名单,而 10080 恰恰在其中。
将端口号改为 18080 后,网页立刻恢复正常加载:

这是我这两天搭建的一个内部服务,用于查询火山引擎 coding plan 使用量,部署在内网环境。
浏览器内置的受限端口完整列表可参考规范:
https://fetch.spec.whatwg.org/#port-blocking
| 端口 | 典型服务 |
|---|---|
| 0 | — |
| 1 | tcpmux |
| 7 | echo |
| 9 | discard |
| 11 | systat |
| 13 | daytime |
| 15 | netstat |
| 17 | qotd |
| 19 | chargen |
| 20 | ftp-data |
| 21 | ftp |
| 22 | ssh |
| 23 | telnet |
| 25 | smtp |
| 37 | time |
| 42 | name |
| 43 | nicname |
| 53 | domain |
| 69 | tftp |
| 77 | — |
| 79 | finger |
| 87 | — |
| 95 | supdup |
| 101 | hostname |
| 102 | iso-tsap |
| 103 | gppitnp |
| 104 | acr-nema |
| 109 | pop2 |
| 110 | pop3 |
| 111 | sunrpc |
| 113 | auth |
| 115 | sftp |
| 117 | uucp-path |
| 119 | nntp |
| 123 | ntp |
| 135 | epmap |
| 137 | netbios-ns |
| 139 | netbios-ssn |
| 143 | imap |
| 161 | snmp |
| 179 | bgp |
| 389 | ldap |
| 427 | svrloc |
| 465 | submissions |
| 512 | exec |
| 513 | login |
| 514 | shell |
| 515 | printer |
| 526 | tempo |
| 530 | courier |
| 531 | chat |
| 532 | netnews |
| 540 | uucp |
| 548 | afp |
| 554 | rtsp |
| 556 | remotefs |
| 563 | nntps |
| 587 | submission |
| 601 | syslog-conn |
| 636 | ldaps |
| 989 | ftps-data |
| 990 | ftps |
| 993 | imaps |
| 995 | pop3s |
| 1719 | h323gatestat |
| 1720 | h323hostcall |
| 1723 | pptp |
| 2049 | nfs |
| 3659 | apple-sasl |
| 4045 | npp |
| 4190 | sieve |
| 5060 | sip |
| 5061 | sips |
| 6000 | x11 |
| 6566 | sane-port |
| 6665 | ircu |
| 6666 | ircu |
| 6667 | ircu |
| 6668 | ircu |
| 6669 | ircu |
| 6679 | osaut |
| 6697 | ircs-u |
| 10080 | amanda |
在搭建 Web 服务时,务必避开上面列出的这些端口,因为它们已经直接写进了 Chrome 和 Firefox 的源代码中,稍不注意浏览器就可能拒绝连接。
Chrome 中定义端口黑名单的代码位置如下:
https://raw.githubusercontent.com/chromium/chromium/main/net/base/port_util.cc

Firefox 的端口封锁逻辑在此处:
https://searchfox.org/firefox-main/source/netwerk/base/nsIOService.cpp

列表中其他端口基本都在 2000 以下,这正好印证了许多编程规范中的建议:不要使用 2000 以下的端口,因为它们大多属于系统预留端口。唯一例外的就是 10080,这号码差点赶上运营商 10086 的热线电话,它也是整个受限列表中唯一的高位禁用端口。

值得一提的是,飞牛的默认端口是 5666 和 5667,虽然看起来与 6666、6667 有点像,但并未发生冲突。

全文完。