成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

我是如何獲取到前端用戶的IP,并根據(jù)IP來獲取地理定位的

CastlePeaK / 3546人閱讀

摘要:故事的經(jīng)過是這樣的有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計(jì)用戶群的分布,進(jìn)而為后期的按地區(qū)精確推廣活動(dòng)來做準(zhǔn)備。

大家好,我是冰茶,容我開場(chǎng)先講個(gè)故事。
故事的經(jīng)過是這樣的:

有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計(jì)用戶群的分布,進(jìn)而為后期的按地區(qū)精確推廣活動(dòng)來做準(zhǔn)備。

me:這個(gè)簡(jiǎn)單啊,下單的時(shí)候,給個(gè)地理定位的請(qǐng)求,來獲取用戶所在位置就行啊,這樣的話還準(zhǔn)確......

產(chǎn)品兄:這個(gè)方案需要考慮下,如果要是請(qǐng)求用戶的定位信息,首先呢,可能會(huì)引起用戶的反感,畢竟咱們這個(gè)產(chǎn)品,從頭到尾都沒有用到過定位,突然啪的一下來個(gè)彈窗,用戶肯定一是蒙逼,說你從頭到尾都沒有定位功能,要個(gè)定位權(quán)限有毛用,二是隱私意識(shí)強(qiáng)點(diǎn),就直接拒絕掉了,這樣直接就拿不到信息,無法達(dá)到預(yù)設(shè)的效果了。其次呢,咱們能少打擾用戶,就少打擾用戶,有句話說,悄悄地進(jìn)村,打槍的不要。就是說呢,讓用戶流暢的使用下來整個(gè)流程,讓用戶用的爽,一直是咱們的原則......

產(chǎn)品兄:我聽說有個(gè)IP定位,這東西蠻爽的,也不打擾用戶,再說IP這個(gè)東西,只要用戶訪問我們的服務(wù),絕對(duì)有這個(gè)東西能拿到,我們就拿他這個(gè)東西來反查下,這樣咱們要的省市信息就這樣到手了,而且這樣的成功幾率高,不用擔(dān)心用戶拒絕定位導(dǎo)致數(shù)據(jù)統(tǒng)計(jì)不全......

后端同學(xué):IP這個(gè)東西的確可以,但是呢,我們的服務(wù)都在負(fù)載均衡/反向代理服務(wù)后面,后端直接拿到的IP也是前端服務(wù)器的IP,而不是用戶直連我們前端服務(wù)器的IP,所以這個(gè)東西難辦啊~

后端同學(xué):想當(dāng)初我們的項(xiàng)目還不是前后端分離的時(shí)候,的確是可以直接拿到IP的......

另外的前端同學(xué):嗯,我這邊也了解一些,我之前看到有前端獲取IP的方法:

//創(chuàng)建RTCPeerConnection接口
let conn = new RTCPeerConnection({
        iceServers: []
    }) 
let noop = function(){}
conn.onicecandidate = function(ice){
    if (ice.candidate){
        //使用正則獲取ip
        let ip_regex = /([0-9]{1,3}(.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
        let ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
        console.log(ip_addr)
        conn.onicecandidate = noop
    }
}
//隨便創(chuàng)建一個(gè)叫狗的通道(channel)
conn.createDataChannel("dog")
//創(chuàng)建一個(gè)SDP協(xié)議請(qǐng)求
conn.createOffer(conn.setLocalDescription.bind(conn),noop)

作者:Illgo
鏈接:https://www.zhihu.com/question/20675353/answer/335325619
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

之后用 WebRTC獲取IP 等關(guān)鍵詞找了幾篇類似的文章。這個(gè)比較全面。

獲取訪問者內(nèi)網(wǎng)IP

根據(jù)類似的文章,親自試驗(yàn)了下,有兩個(gè)問題:

我們有微信站的業(yè)務(wù),在微信環(huán)境下獲取不到IP。這個(gè)方法在Chrome和Firefox下面很好用。

獲取的是用戶的內(nèi)網(wǎng)IP,用拿到的IP去反查,得到的結(jié)論是局域網(wǎng)地址。

這還查個(gè)毛線的查,于是......這個(gè)方案被放棄了......

me:在Google找了一些方案,大多數(shù)方案都是通過前端調(diào)取一個(gè)接口,接口返回地理定位等信息。和后端同學(xué)說的一致,只要用戶發(fā)請(qǐng)求,服務(wù)器能直接拿到用戶網(wǎng)絡(luò)出口的IP信息,然后咱們就調(diào)接口查一下就可以了。關(guān)于后端接口拿不到IP的問題,微信支付這邊有類似的解決方案。

備注:獲取用戶IP指引

me:咱們服務(wù)器相當(dāng)于在代理后面,只要找運(yùn)維去配置下,應(yīng)該就可以了。

后端同學(xué):這個(gè)可以考慮,稍后我這邊和運(yùn)維聯(lián)系下,讓他們那邊配置下,把用戶請(qǐng)求代理服務(wù)器獲取到的IP傳遞給我這邊,這樣就可以了。

于是問題解決,大功告成~

開玩笑,要真是這樣的話,這篇文章就不會(huì)出現(xiàn)了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96423.html

相關(guān)文章

  • HTML5 Geolocation學(xué)習(xí)

    摘要:如果應(yīng)用程序不再需要接受有關(guān)用戶的持續(xù)位置更新,則只需調(diào)用函數(shù),如下所示表示一個(gè)唯一的監(jiān)視請(qǐng)求以便將來取消監(jiān)視。 GeolocationAPI學(xué)習(xí),我寫的挺枯燥的,直接跳到最后看示例。 5.1 位置信息 HTML5 Geolocation API的使用方法相當(dāng)簡(jiǎn)單。請(qǐng)求一個(gè)位置信息,如果用戶同意,瀏覽器就會(huì)返回位置信息,該位置信息是通過支持HTML5地理定位功能的底層設(shè)備(手機(jī)、筆記本...

    xiyang 評(píng)論0 收藏0
  • CDN小結(jié)

    摘要:二目的是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小用戶訪問量大網(wǎng)點(diǎn)分布不均而產(chǎn)生的用戶訪問網(wǎng)站響應(yīng)速度慢的根本原因。 一、CDN全稱:??Content Delivery Network或Content Ddistribute Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。 ??二、目的:??CDN是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小、用戶訪問量大、網(wǎng)點(diǎn)分布不...

    cod7ce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<