blob: d14f2439ed5313e85a76d53ac3888bf9d44a318e [file] [log] [blame]
Willy Tarreau29b25312016-11-08 14:57:29 +0100151Degrees Device Detection
2--------------------------
3
4You can also include 51Degrees for inbuilt device detection enabling attributes
5such as screen size (physical & pixels), supported input methods, release date,
6hardware vendor and model, browser information, and device price among many
7others. Such information can be used to improve the user experience of a web
8site by tailoring the page content, layout and business processes to the
9precise characteristics of the device. Such customisations improve profit by
10making it easier for customers to get to the information or services they
11need. Attributes of the device making a web request can be added to HTTP
12headers as configurable parameters.
13
14In order to enable 51Degrees download the 51Degrees source code from the
Dragan Dosen16586e62017-09-27 12:55:07 +020015official git repository :
16
17 - either use the proven stable but frozen 3.2.10 version which
18 supports the Trie algorithm :
19
Eugene Dorfman88bd6952023-11-20 20:41:48 +010020 git clone https://github.com/51Degrees/Device-Detection.git -b v3.2.10
Dragan Dosen16586e62017-09-27 12:55:07 +020021
22 - or use the new 3.2.12.12 version which continues to receive database
23 updates and supports a new Hash Trie algorithm, but which is not
24 compatible with older Trie databases :
Willy Tarreau29b25312016-11-08 14:57:29 +010025
Ben51Degrees636e6af2017-10-05 19:54:18 +010026 git clone https://github.com/51Degrees/Device-Detection.git -b v3.2.12
Willy Tarreau29b25312016-11-08 14:57:29 +010027
28then run 'make' with USE_51DEGREES and 51DEGREES_SRC set. Both 51DEGREES_INC
29and 51DEGREES_LIB may additionally be used to force specific different paths
30for .o and .h, but will default to 51DEGREES_SRC. Make sure to replace
31'51D_REPO_PATH' with the path to the 51Degrees repository.
32
Ben51Degrees636e6af2017-10-05 19:54:18 +01003351Degrees provide 3 different detection algorithms:
Willy Tarreau29b25312016-11-08 14:57:29 +010034
35 1. Pattern - balances main memory usage and CPU.
36 2. Trie - a very high performance detection solution which uses more main
37 memory than Pattern.
Ben51Degrees636e6af2017-10-05 19:54:18 +010038 3. Hash Trie - replaces Trie, 3x faster, 80% lower memory consumption and
39 tuning options.
Willy Tarreau29b25312016-11-08 14:57:29 +010040
41To make with 51Degrees Pattern algorithm use the following command line.
42
43 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/pattern
44
45To use the 51Degrees Trie algorithm use the following command line.
46
47 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/trie
48
49A data file containing information about devices, browsers, operating systems
50and their associated signatures is then needed. 51Degrees provide a free
51database with Github repo for this purpose. These free data files are located
52in '51D_REPO_PATH'/data with the extensions .dat for Pattern data and .trie for
Ben51Degrees636e6af2017-10-05 19:54:18 +010053Trie data. Free Hash Trie data file can be obtained by signing up for a licence
54key at https://51degrees.com/products/store/on-premise-device-detection.
55
Ben51Degrees31c3d512019-06-12 15:42:53 +010056For HAProxy developers who need to verify that their changes didn't affect the
Willy Tarreau977209d2021-04-02 16:12:32 +02005751Degrees implementation, a dummy library is provided in the
58"addons/51degrees/dummy" directory. This does not function, but implements the
59API such that the 51Degrees module can be used (but not return any meaningful
60information). To test either Pattern or Hash Trie, build with:
Willy Tarreau5e4c5002019-06-13 15:56:10 +020061
Willy Tarreau977209d2021-04-02 16:12:32 +020062 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC=addons/51degrees/dummy/pattern
Ben51Degrees31c3d512019-06-12 15:42:53 +010063or
Willy Tarreau977209d2021-04-02 16:12:32 +020064 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC=addons/51degrees/dummy/trie
Willy Tarreau5e4c5002019-06-13 15:56:10 +020065
Ben51Degrees31c3d512019-06-12 15:42:53 +010066respectively.
Willy Tarreau29b25312016-11-08 14:57:29 +010067
68The configuration file needs to set the following parameters:
69
70 global
71 51degrees-data-file path to the Pattern or Trie data file
72 51degrees-property-name-list list of 51Degrees properties to detect
73 51degrees-property-separator separator to use between values
74 51degrees-cache-size LRU-based cache size (disabled by default)
75
76The following is an example of the settings for Pattern.
77
78 global
79 51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.dat
80 51degrees-property-name-list IsTablet DeviceType IsMobile
81 51degrees-property-separator ,
82 51degrees-cache-size 10000
83
84HAProxy needs a way to pass device information to the backend servers. This is
85done by using the 51d converter or fetch method, which intercepts the HTTP
86headers and creates some new headers. This is controlled in the frontend
87http-in section.
88
89The following is an example which adds two new HTTP headers prefixed X-51D-
90
91 frontend http-in
92 bind *:8081
93 default_backend servers
94 http-request set-header X-51D-DeviceTypeMobileTablet %[51d.all(DeviceType,IsMobile,IsTablet)]
95 http-request set-header X-51D-Tablet %[51d.all(IsTablet)]
96
97Here, two headers are created with 51Degrees data, X-51D-DeviceTypeMobileTablet
98and X-51D-Tablet. Any number of headers can be created this way and can be
99named anything. 51d.all( ) invokes the 51degrees fetch. It can be passed up to
100five property names of values to return. Values will be returned in the same
Joseph Herlant71b4b152018-11-13 16:55:16 -0800101order, separated by the 51-degrees-property-separator configured earlier. If a
Willy Tarreau29b25312016-11-08 14:57:29 +0100102property name can't be found the value 'NoData' is returned instead.
103
104In addition to the device properties three additional properties related to the
105validity of the result can be returned when used with the Pattern method. The
106following example shows how Method, Difference and Rank could be included as one
107new HTTP header X-51D-Stats.
108
109 frontend http-in
110 ...
111 http-request set-header X-51D-Stats %[51d.all(Method,Difference,Rank)]
112
113These values indicate how confident 51Degrees is in the result that that was
114returned. More information is available on the 51Degrees web site at:
115
116 https://51degrees.com/support/documentation/pattern
117
118The above 51d.all fetch method uses all available HTTP headers for detection. A
119modest performance improvement can be obtained by only passing one HTTP header
120to the detection method with the 51d.single converter. The following example
121uses the User-Agent HTTP header only for detection.
122
123 frontend http-in
124 ...
125 http-request set-header X-51D-DeviceTypeMobileTablet %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
126
127Any HTTP header could be used inplace of User-Agent by changing the parameter
128provided to req.fhdr.
129
130When compiled to use the Trie detection method the trie format data file needs
131to be provided. Changing the extension of the data file from dat to trie will
132use the correct data.
133
134 global
135 51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.trie
136
137When used with Trie the Method, Difference and Rank properties are not
138available.
139
140The free Lite data file contains information about screen size in pixels and
141whether the device is a mobile. A full list of available properties is located
142on the 51Degrees web site at:
143
144 https://51degrees.com/resources/property-dictionary
145
146Some properties are only available in the paid for Premium and Enterprise
147versions of 51Degrees. These data sets not only contain more properties but
148are updated weekly and daily and contain signatures for 100,000s of different
149device combinations. For more information see the data options comparison web
150page:
151
152 https://51degrees.com/compare-data-options