Windows 7 (含 Vista/Server 2008+) 預設將 localhost 解析為 IPv6 回環位址 ::1,而非 IPv4 127.0.0.1。這在 PHP 等伺服器端程式連接本機資料庫 (MySQL/PostgreSQL) 時,會導致連線建立延遲達百倍以上,嚴重拖慢本地開發/測試效能。
> ping localhost
回覆自 ::1 時間<1ms ← IPv6 回環
> ping 127.0.0.1
回覆自 127.0.0.1 時間<1ms ← IPv4 回環
修改 C:\Windows\System32\drivers\etc\hosts,將 localhost 指向 127.0.0.1 後,PHP 連線速度瞬間恢復正常。
| 連線方式 | 頁面載入時間 | 相對效能 |
|---|---|---|
localhost (預設 ::1) | ~15 秒 | 基準 (極慢) |
127.0.0.1 | ~0.1 秒 | 快 150 倍 |
localhost 在 hosts 中無明確 IPv4 記錄時,DNS 客戶端優先解析 AAAA 記錄 (::1)。localhost 時,嘗試 IPv6 連線失敗/超時後再回退 IPv4,過程耗時極長(驅動實作、TCP 回退機制、防火牆規則皆影響)。127.0.0.1 繞過 DNS 解析,強制 IPv4 連線,零延遲。C:\Windows\System32\drivers\etc\hosts (需管理員權限),確保包含:127.0.0.1 localhost::1 localhost 行。存檔後 ipconfig /flushdns 生效。mysqli_connect('127.0.0.1', ...) 或 PDO DSN host=127.0.0.1,不依賴主機名解析。最佳實踐:本地開發環境統一使用127.0.0.1連接資料庫/快取/訊息佇列,避免主機名解析不確定性。生產環境同樣建議在應用程式設定中明確指定 IP,而非依賴localhost解析。此問題在 Win10/11、Linux (啟用 IPv6 時) 同樣存在,跨平台通用原則。