HTTP_X_FORWARDED_FOR與REMOTE_ADDR的區別.在Request.ServerVariables中並沒有HTTP_X_FORWARDED_FOR這個變量,只有REMOTE_ADDR這個變量,但是這兩個變數都能夠取得客戶端IP位址。那麼他們之間的差別是什麼呢?
在ASP中使用Request.ServerVariables(REMOTE_ADDR) 來取得客戶端的IP 位址,但如果客戶端是使用代理伺服器來訪問,那麼取到的就是代理伺服器的IP位址,而不是真正的客戶端IP 位址。若要透過代理伺服器取得客戶端的真實IP 位址,就要使用Request.ServerVariables(HTTP_X_FORWARDED_FOR) 來讀取。
不過要注意的事,並不是每個代理伺服器都能用Request.ServerVariables(HTTP_X_FORWARDED_FOR) 來讀取客戶端的真實IP,有些用此方法讀取到的仍然是代理伺服器的IP。
還有一點要注意的是:如果客戶端沒有透過代理伺服器來訪問,那麼用Request.ServerVariables (HTTP_X_FORWARDED_FOR) 取到的值將會是空的。因此,如果要在程式中使用此方法,可以這樣處理:
.....
userip = Request.ServerVariables(HTTP_X_FORWARDED_FOR)
If userip = Then userip = Request.ServerVariables(REMOTE_ADDR)
.....
即:若客戶端通過代理伺服器,則取HTTP_X_FORWARDED_FOR 的值,若未通過代理伺服器,就取REMOTE_ADDR 的值。
當然,上面的這種做法並不是萬能的,就像第三段提到的那樣,你有沒有考慮到如果用戶使用的是2級代理、3級代理、4級代理....... .