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

nic*_*ick 3 ip google-chrome

我有一个单页应用程序在 webpack 开发服务器中运行,用于在我的本地热重载。但是,它的后端应用程序不在我的本地,而是托管在远程服务器上,例如http://remote-server.com.

当我在 chrome 地址字段中使用这样的地址时:0.0.0.0:3000/homepage,http 请求(对远程后端服务器的 api 调用)比使用慢 5 倍(甚至更多)localhost:3000/homepage

我真的很困惑为什么会发生这种情况?

实际上,更准确地说,问题是,当我要求 Chrome ping 0.0.0.0 时,这对浏览器/服务器意味着什么,因为 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

Run Code Online (Sandbox Code Playgroud)

我期待 http 请求花费相同的时间......当我使用0.0.0.0localhost

sha*_*ncs 6

鉴于 0.0.0.0 只是用来表示“绑定到任何可能的地址”,当我要求 Chrome ping 0.0.0.0 时,这对浏览器/服务器意味着什么

根据RFC5735规范,0.0.0.0仅表示“源地址”,这意味着它是不可路由的地址,不能用于目的地。

但是,对于实际的原因,很多客户端软件的享受0.0.0.0作为localhost。此类软件列表包括:Chrome、Firefox、Safari、curl、telnet 等。因为许多网络服务器软件启动时都会显示“listen on 0.0.0.0...”等消息,因此0.0.0.0对于初级开发人员来说,允许访问非常人性化。

实际上,对于 Chrome 来说,这种行为是作为一个问题来讨论的,问题的状态一开始是“WontFix”,但后来改为“Fixed”,解决方案如下:

允许显式导航到“0.0.0.0”以支持执行到本地主机的导航的系统(无视规范......但似乎很常见)。

这仍然会阻止导航到任何其他具有前导八位字节 0 的 IP,并且仅当 0.0.0.0 以 4 分量点分四元组形式实际输入时才允许。