学到了:localhost 居然支持二级域名

原始链接在: 学到了:localhost 居然支持二级域名 - 小众软件

在任意浏览器打开 http://localhost/ 实际上访问的就是本机地址,即 127.0.0.1(如果你的设备上没有开启服务,那么还是打不开)。

内网地址不够怎么办

但如果家里有很多服务,用一个地址就很不够了。于是,localhost 还能这样用:

  • http://appinn.localhost
  • http://123.localhost
  • http://456.localhost

不需要修改 hosts 文件,直接用就行。但是不支持 ping

青小蛙测试 macOS 与 Windows,都没有问题,随开随用。


青小蛙也研究了下 RFC 6771 文档,里面有一条,虽然看不懂,但可以这样用。

6.3 . “localhost” 域名预留注意事项

域“localhost.”以及任何属于“.localhost.”的名称在以下方面具有特殊性:

  1. 用户可以像使用其他域名一样自由使用本地主机名。用户可以假设对本地主机名的 IPv4 和 IPv6 地址查询始终会解析到相应的 IP 环回地址。
  2. 应用软件可以将本地主机名识别为特殊名称,或者可以像对待其他域名一样将其传递给名称解析 API。
  3. 名称解析 API 和库应该将本地主机名识别为特殊名称,并且应该始终为地址查询返回 IP 环回地址,为所有其他查询类型返回否定响应。
  4. 名称解析 API 不应将本地主机名称的查询发送到其配置的缓存 DNS 服务器。
  5. 缓存 DNS 服务器应该将本地主机名识别为特殊名称,并且不应该尝试查找它们的 NS 记录,或者以其他方式查询权威 DNS 服务器以尝试解析本地主机名。

相反,对于所有此类地址查询,缓存 DNS 服务器应该立即生成一个提供 IP 环回地址的肯定响应,而对于所有其他查询类型,则立即生成一个否定响应。

这是为了避免对根名称服务器和其他名称服务器造成不必要的负载。


首发于小众软件微信公众号:https://mp.weixin.qq.com/s/_36t6AkJDK5pjFFdGRi48w

1 个赞

可是,不同的服务提供的端口本身就不一样啊,直接访问localhost加端口号不就行了

可是,我就愿意用 appiinn.localhost 访问呀

没看懂,怎么把端口号绑定二级域名的

端口随便写啊

应该是说域名 xxx.localhostxxx 为任意字符)和域名 localhost` 是等效的。

比如,我在电脑上开启了一个端口为 1234 的 HTTP 服务,那么,

  • 我在浏览器中访问 http://localhost:1234 就可以访问它。
  • 我访问 http://abcde.localhost:1234http://hellohappyworld.localhost:1234,也可以访问它。

至于您说的:

应该是一个误会。楼主的例子举得比较容易产生歧义,其中的

用的应该还是 80 端口(即 http 协议的默认端口),所以直接在浏览器中访问这些 URL、不带端口号,是可以直接访问的。

至于楼主说的:

鄙人感觉确实不妥。区分不同的服务,还是需要用端口号。如果在浏览器中输入不带端口号的 URL,默认就是与 80 端口通信。或许可以说,这种二级域名并没有起到区分的作用。

4 个赞

也就是说加不加都一样

3 个赞

我还是继续劫持 g.cn:rofl:

2 个赞

都是绑定到127.0.0.1吧?
web服务会根据配置按域名(子域名)差异分派到对应不同的物理目录和文件

2 个赞

额。。你才知道啊。。

子域名还是比端口号方便一点,那个冒号有点儿烦,而且不够直观。

如果正好有用一些tauri做的软件,恰好支持打开开发者工具的话,就可以发现tauri软件也在用类似的域名。
不清楚electron这种自带内核的软件是不是这样

image.png

1 个赞

其实我现在比较希望了解的是:

我的电脑上开启了 2 个 HTTP 服务,

  • 服务 1:端口为 2001
  • 服务 2:端口为 2002

那么,要如何实现如下功能:

  • 浏览器访问 http://001.localhost,直接解析到服务 http://localhost:2001
  • 浏览器访问 http://002.localhost,直接解析到服务 http://localhost:2002

换言之,如何将端口映射为二级域名?

看网上的介绍,这个功能似乎是需要修改 DNS 设置的。是否有其他方法呢?

这活是 nginx 反代功能的标准用途啊。

server
  {
    server_name  002.localhost;
    proxy_pass   http://localhost:3000;
  }

以及,证书也有:

原来如此,看来是需要服务器支持啊。我平时用的服务器只是 DUFS,它好像是没有这个功能。

服务不多不太需要 nginx,多了可以上一个,统一管理还方便

1 个赞

额,还是没看明白具体怎么启用二级域名的

不用启用,直接用就行。默认开启的

本地起个nginx或者caddy,或者其他反代服务器

1 个赞

127.0.0.1不是数字更少?反正都要加端口号