127.0.0.1和localhost有什么不同?

假设在.../hosts定义了以下内容:

 127.0.0.1 localhost 

什么(如果有的话)是使用127.0.0.1localhost作为服务器名称之间的实际区别,尤其是在本地运行正在侦听连接的进程时?

那么,最可能的区别是,你仍然需要做一个localhost的实际查找

如果您使用127.0.0.1 ,那么(智能)软件将直接将其转换为IP地址并使用它。 gethostbyname一些实现将检测点状格式(大概是等效的IPv6格式),而不是查找。

否则,名称必须解决。 而且不能保证你的hosts文件实际上会用于这个分辨率(首先,或者根本不),所以localhost可能成为一个完全不同的 IP地址。

我的意思是,在某些系统上,本地hosts文件可以被绕过。 host.conf文件在Linux(和许多其他的Unices)上控制这个。

维基百科总结得很好:

在现代计算机系统上,localhost作为主机名转换为127.0.0.0/8(环回)networking块中的IPv4地址,通常是127.0.0.1或IPv6中的:: 1。

唯一的区别是,它将查找localhostparsing到的系统的DNS。 这个查询真的很快。 例如,要进入到stackoverflow.com你input到地址栏(或使用一个书签在这里指出)。 无论哪种方式,你通过主机名来到这里。 localhost提供了类似的function。

有些应用程序会特别对待“localhost”。 mysql客户端会将localhost视为连接到本地unix域套接字的请求,而不是使用tcp连接到127.0.0.1上的服务器。 这可能会更快,并可能在不同的身份validation区域中。

我不知道其他的应用程序,对待本地主机不同于127.0.0.1,但可能有一些。

那么,通过IP更快。

基本上,当你通过服务器名称呼叫,它被转换为原始IP。

但是要记住一个IP很困难,因为这个原因是域名被创build的。

我个人使用http://localhost而不是http://127.0.0.1http://username

没有什么不同。 一个比另一个更容易记住。 通常,您需要定义一个与IP地址关联的名称。 你不必为127.0.0.1指定localhost,你可以指定任何你想要的名字。

主要区别在于可以通过Unix域套接字进行连接,如下所示: localhost与127.0.0.1