在開發Web程序時,獲取客戶端IP地址可以幫助我們更好地了解用戶行為,進而對我們的Web應用做出優化和改進。本文將從多個方面對獲取客戶端IP地址的方法及示例代碼進行詳細的闡述。
一、從瀏覽器獲取IP地址
在前端頁面中,可以通過JavaScript的window對象來獲取客戶端IP地址。以下是示例代碼:
function getIPAddress() {
fetch('https://api.ipify.org/?format=json')
.then(response => response.json())
.then(data => console.log(data.ip));
}
在上述代碼中,我們使用了fetch方法調用了一個IP地址查詢的API。當API返回結果時,我們可以通過data對象獲取客戶端IP地址。
二、從HTTP頭中獲取IP地址
在後端程序中,可以通過解析HTTP頭獲取客戶端IP地址。以下是示例代碼:
function getClientIP(req) {
return req.headers['x-forwarded-for'] || req.connection.remoteAddress;
}
在上述代碼中,我們從HTTP頭中獲取了X-Forwarded-For字段的值作為客戶端IP地址。如果該字段不存在,則返回req.connection.remoteAddress字段的值。
三、從代理服務器獲取IP地址
在一些情況下,客戶端的請求可能會通過代理服務器轉發。此時,無法從HTTP頭中獲取客戶端真實IP地址。以下是示例代碼:
function getClientIP(req) {
const ipList = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'].split(',') : [];
while (ipList.length) {
const ip = ipList.pop().trim();
if (!['unknown', 'undefined', 'null', ''].includes(ip.toLowerCase())) {
return ip;
}
}
return req.connection.remoteAddress;
}
在上述代碼中,我們使用循環獲取從代理服務器轉發的IP地址列表。從列表的尾部開始,依次取出每個IP地址並去除首尾空格。如果取出的IP地址非空,則返回該值,表示獲取到了客戶端真實IP地址。如果列表循環完畢仍未獲取到客戶端真實IP地址,則返回req.connection.remoteAddress字段的值。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/180220.html