当我在浏览器中使用0.0.0.0而不是localhost时,Chrome/server会做什么?

6
我正在使用webpack开发服务器运行单页应用程序进行热重载。但是其后端应用程序不在我的本地计算机上,而是托管在远程服务器上,例如http://remote-server.com. 当我在Chrome地址栏中输入这样的地址:0.0.0.0:3000/homepage时,与使用localhost:3000/homepage相比,HTTP请求(向远程后端服务器进行API调用)会变慢5倍甚至更多。
我真的很困惑为什么会这样?
实际上,更确切地说,问题是,当我要求Chrome对0.0.0.0进行ping时,对于浏览器/服务器来说意味着什么,考虑到0.0.0.0只是用于表示“绑定到任何可能的地址”。
HTTP请求如下:
get /remote-server.com/api/v1/users
get /remote-server.com/api/v1/products
get /remote-server.com/api/v1/prices

我原以为当我使用0.0.0.0localhost时,http请求会花费同样的时间。

1个回答

12
当我请求Chrome ping 0.0.0.0时,对于浏览器/服务器来说意味着什么?实际上,0.0.0.0只是用来表示“绑定到任何可能的地址”,根据RFC5735规定,它只代表“源地址”,因此是不可路由的地址,不能用作目标地址。但是,出于实际原因,许多客户端软件将0.0.0.0视为localhost,例如Chrome、Firefox、Safari、curl、telnet等。这是因为许多Web服务器软件启动时会显示“监听0.0.0.0...”,允许访问0.0.0.0对于初级开发人员非常友好。实际上,对于Chrome而言,这种行为曾被讨论为一个issue,最初该问题的状态是“WontFix”,但后来更改为“Fixed”,并提供了以下解决方案:允许显式导航到“0.0.0.0”以支持系统,其中这会执行到localhost的导航(违反规格...但似乎很常见)。
这仍然会阻止导航到任何其他以0开头的IP,并且只允许以4组点分十进制形式输入0.0.0.0。

谢谢您的回答,我非常感激! - nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接