![为什么 $_SERVER['REMOTE_ADDR'] 在本地环境中的值为“127.0.0.1”?](https://linux22.com/image/559746/%E4%B8%BA%E4%BB%80%E4%B9%88%20%24_SERVER%5B'REMOTE_ADDR'%5D%20%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E5%80%BC%E4%B8%BA%E2%80%9C127.0.0.1%E2%80%9D%EF%BC%9F.png)
无论请求脚本的计算机是否是托管脚本的同一台计算机,该值是否都应与请求脚本的计算机的 IP 相匹配?
答案1
因为当您在本地运行 PHP 时,您发出的每个请求都来自您的机器,而该机器恰好有一个远程(或在本例中为本地)地址...等待它.... 127.0.0.1(== localhost)。
阐述:假设你没有网络连接,什么都没有,没有 WiFi,没有电缆。本地连接仍然有效。为什么?因为它将是愚蠢的需要互联网连接地方事务。相反,这种联系来自于服务器本身这意味着,您将看到localhost
或127.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