在服務器端有沒有什麼方法可以檢測API對移動設備(來自移動應用程序)的特定請求? 我知道用戶代理嗅探,但我不喜歡這個從幾個足夠的理由不執行它的原因。 我也知道我可以添加一些標誌來請求,當它來自我的移動應用程序,但這似乎有點骯髒。 實際上是否有任何「正確」的方式來做到這一點?如何檢測請求是否來自移動設備
我想它並沒有太大的改變,但我的背部,並在node.js.
問候,謝謝! Tom
在服務器端有沒有什麼方法可以檢測API對移動設備(來自移動應用程序)的特定請求? 我知道用戶代理嗅探,但我不喜歡這個從幾個足夠的理由不執行它的原因。 我也知道我可以添加一些標誌來請求,當它來自我的移動應用程序,但這似乎有點骯髒。 實際上是否有任何「正確」的方式來做到這一點?如何檢測請求是否來自移動設備
我想它並沒有太大的改變,但我的背部,並在node.js.
問候,謝謝! Tom
一般的答案是否定的。您從設備中獲取標題/消息。您對設備的所有了解都在標題中,設備可以根據需要編寫它想要的內容。如果您正在討論http請求(通過代理查詢來指示),您可以在這裏查看標題:
所有可以做的「可靠」是查找用戶代理。就我而言,它是Linux上的Mozilla Firefox。但如果我想要,我可以僞造它。
Host: somesite.org
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://somesite.org/index.php?page=2
Cookie: rteStatus=rte;
Cache-Control: max-age=0
也許你可以從引薦一些信息,如果是一些鉻的移動網站,或者你可以看看接受並接受-Enconding,也許一些移動瀏覽器接受不同的東西。但是沒有可靠的方法來確定設備,而是通過用戶代理通過標頭來確定。
另一種方法是查看請求是否來自稱爲3G或4G池的IP。但是,如果請求不是通過WLAN/WIFI進行的,這隻會起作用。我不確定是否存在3G/4G IP地址池列表。
您可以使用UserAgent字符串進行檢測。下面的代碼在C#中。
public bool IsMobileDevice(HttpRequest r){
String userAgetnt = r.UserAgent;
String deviceName = "Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini";
return Regex.IsMatch (r.UserAgent, deviceName);
}