[ASP.NET] 本地測試時 Request.UserHostAddress 為何是 ::1 ?
阿新 • • 發佈:2018-12-17
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
我們可以發現 ::1
和 127.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
了。