1. 程式人生 > >[ASP.NET] 本地測試時 Request.UserHostAddress 為何是 ::1 ?

[ASP.NET] 本地測試時 Request.UserHostAddress 為何是 ::1 ?

Request.UserHostAddress

Request.UserHostAddress 是一種比較簡便的獲得客戶端IP的方式。 MSDN的官方文件中如此描述了這個Property:獲取遠端客戶端的 IP 主機地址。

本地測試

訪問本地的網頁時,往往通過 http://localhost:埠/檔名 來進行訪問,瀏覽器並不知道localhost是什麼,會去通過DNS讓系統嘗試解析名為localhost的域名,再根據解析得到的IP地址進行訪問。 而我們檢視系統對於localhost的解析記錄時,得到了如下結果:

>nslookup localhost
伺服器:  UnKnown
Address:  2001:da8::666

名稱:    localhost
Addresses:  ::1
          127.0.0.1

我們可以發現 ::1127.0.0.1 都是在DNS的A記錄裡的,因為我們的系統支援ipv6(::1是一個ipv6地址),ipv6/ipv4雙棧DNS會根據順序訪問第一個可用的ip,所以會去訪問::1而不是127.0.0.1。 其實,::1是ipv6中的本地迴環地址,正如127.0.0.1是ipv4中的本地迴環地址,只因為我們通過了ipv6訪問了本地伺服器,致使了我們看到的訪問者ip也是::1而不是127.0.0.1

重見127.0.0.1

既然解析localhost時會根據順序優先通過ipv6訪問::1,如果我們使用127.0.0.1代替localhost,我們就能看見訪問者ip是127.0.0.1了。