为什么 $_SERVER['REMOTE_ADDR'] 在本地环境中的值为“127.0.0.1”?

为什么 $_SERVER['REMOTE_ADDR'] 在本地环境中的值为“127.0.0.1”?

无论请求脚本的计算机是否是托管脚本的同一台计算机,该值是否都应与请求脚本的计算机的 IP 相匹配?

答案1

因为当您在本地运行 PHP 时,您发出的每个请求都来自您的机器,而该机器恰好有一个远程(或在本例中为本地)地址...等待它.... 127.0.0.1(== localhost)。

阐述:假设你没有网络连接,什么都没有,没有 WiFi,没有电缆。本地连接仍然有效。为什么?因为它将是愚蠢的需要互联网连接地方事务。相反,这种联系来自于服务器本身这意味着,您将看到localhost127.0.0.1作为远程地址,因为这是服务器的远程地址,相对于服务器而言。

答案2

原因是您正在与 127.0.0.1 对话。

当与网络设备(本地机器或其他设备)通信时,数据包必须有一个源地址,并且会选择一个地址将在你通信的网络中可用

因此,使用的源地址取决于正在通信的目标地址。

由于服务器报告你即将到来127.0.0.1,你必须说话127.0.0.1,因为这是唯一一个可以选择该源地址的目标地址。

如果您使用机器的 IPv6 本地地址 () 与您的机器通信::1,那么您也会看到::1报告的源地址。

但是,为了看到95.87...地址,你需要说话那个地址也是如此。

您可以尝试通过简单地替换主机名或本地主机或您在 URL 中写的任何内容作为95.87...主机名部分,它会报告您也来自该地址。

我的猜测是,您正在执行http://machinename,即解析为127.0.0.1,因此该127.0.0.1地址也被选为源地址。

答案3

这是一个本地连接。

正在本地建立连接。您的本地 IP 地址本地主机是 127.0.0.1。

除了本地主机之外,没有通过任何其他网络建立连接。

答案4

因为 localhost === 127.0.0.1

相关内容