blob: 2fa64e377f1790980a079104b9089f80a38484d6 [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
20 git clone https://git.51Degrees.com/Device-Detection.git -b v3.2.10
21
Dragan Dosena9800a02022-02-14 13:05:45 +010022 - use newer 3.2.12.12 version which continues to receive database
Dragan Dosen16586e62017-09-27 12:55:07 +020023 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
Dragan Dosena9800a02022-02-14 13:05:45 +010028 - or use the latest 51Degrees version 4 with 51Degrees Hash algorithm,
29 not compatible with older databases :
Willy Tarreau29b25312016-11-08 14:57:29 +010030
Dragan Dosena9800a02022-02-14 13:05:45 +010031 git clone --recurse-submodules https://github.com/51Degrees/device-detection-cxx.git
32
Willy Tarreau3f2803e2022-12-21 18:54:36 +010033then run 'make' with USE_51DEGREES, optionally 51DEGREES_VER=4 (if using
3451Degrees version 4), and 51DEGREES_SRC set. Both 51DEGREES_INC and
3551DEGREES_LIB may additionally be used to force specific different paths for
36.o and .h, but will default to 51DEGREES_SRC. Make sure to replace
37'51D_REPO_PATH' with the path to the 51Degrees repository.
Dragan Dosena9800a02022-02-14 13:05:45 +010038
3951Degrees provide 4 different detection algorithms:
Willy Tarreau29b25312016-11-08 14:57:29 +010040
41 1. Pattern - balances main memory usage and CPU.
42 2. Trie - a very high performance detection solution which uses more main
43 memory than Pattern.
Ben51Degrees636e6af2017-10-05 19:54:18 +010044 3. Hash Trie - replaces Trie, 3x faster, 80% lower memory consumption and
45 tuning options.
Dragan Dosena9800a02022-02-14 13:05:45 +010046 4. 51Degrees V4 Hash - only with 51Degrees Device Detection V4.
Willy Tarreau29b25312016-11-08 14:57:29 +010047
48To make with 51Degrees Pattern algorithm use the following command line.
49
50 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/pattern
51
52To use the 51Degrees Trie algorithm use the following command line.
53
54 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/trie
55
Dragan Dosena9800a02022-02-14 13:05:45 +010056To build with the 51Degrees Device Detection V4 use the following command line.
57
Willy Tarreau3f2803e2022-12-21 18:54:36 +010058 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_VER=4 51DEGREES_SRC='51D_REPO_PATH'/src
Dragan Dosena9800a02022-02-14 13:05:45 +010059
Willy Tarreau29b25312016-11-08 14:57:29 +010060A data file containing information about devices, browsers, operating systems
61and their associated signatures is then needed. 51Degrees provide a free
62database with Github repo for this purpose. These free data files are located
63in '51D_REPO_PATH'/data with the extensions .dat for Pattern data and .trie for
Ben51Degrees636e6af2017-10-05 19:54:18 +010064Trie data. Free Hash Trie data file can be obtained by signing up for a licence
65key at https://51degrees.com/products/store/on-premise-device-detection.
Dragan Dosena9800a02022-02-14 13:05:45 +010066If using the 51degrees version 4, the free hash data file is located in
67'51D_REPO_PATH'/device-detection-data with the .hash extension.
Ben51Degrees636e6af2017-10-05 19:54:18 +010068
Ben51Degrees31c3d512019-06-12 15:42:53 +010069For HAProxy developers who need to verify that their changes didn't affect the
Willy Tarreau977209d2021-04-02 16:12:32 +02007051Degrees implementation, a dummy library is provided in the
71"addons/51degrees/dummy" directory. This does not function, but implements the
72API such that the 51Degrees module can be used (but not return any meaningful
Dragan Dosena9800a02022-02-14 13:05:45 +010073information). To test either Pattern or Hash Trie, or the 51Degrees version 4
74Hash algorithm, build with:
Willy Tarreau5e4c5002019-06-13 15:56:10 +020075
Willy Tarreau977209d2021-04-02 16:12:32 +020076 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC=addons/51degrees/dummy/pattern
Ben51Degrees31c3d512019-06-12 15:42:53 +010077or
Willy Tarreau977209d2021-04-02 16:12:32 +020078 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_SRC=addons/51degrees/dummy/trie
Dragan Dosena9800a02022-02-14 13:05:45 +010079or
Willy Tarreau3f2803e2022-12-21 18:54:36 +010080 $ make TARGET=<target> USE_51DEGREES=1 51DEGREES_VER=4 51DEGREES_SRC=addons/51degrees/dummy/v4hash
Willy Tarreau5e4c5002019-06-13 15:56:10 +020081
Ben51Degrees31c3d512019-06-12 15:42:53 +010082respectively.
Willy Tarreau29b25312016-11-08 14:57:29 +010083
84The configuration file needs to set the following parameters:
85
86 global
Dragan Dosena9800a02022-02-14 13:05:45 +010087 51degrees-data-file path to the Pattern, Trie or V4 Hash data file
Willy Tarreau29b25312016-11-08 14:57:29 +010088 51degrees-property-name-list list of 51Degrees properties to detect
89 51degrees-property-separator separator to use between values
90 51degrees-cache-size LRU-based cache size (disabled by default)
91
92The following is an example of the settings for Pattern.
93
94 global
95 51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.dat
96 51degrees-property-name-list IsTablet DeviceType IsMobile
97 51degrees-property-separator ,
98 51degrees-cache-size 10000
99
100HAProxy needs a way to pass device information to the backend servers. This is
101done by using the 51d converter or fetch method, which intercepts the HTTP
102headers and creates some new headers. This is controlled in the frontend
103http-in section.
104
105The following is an example which adds two new HTTP headers prefixed X-51D-
106
107 frontend http-in
108 bind *:8081
109 default_backend servers
110 http-request set-header X-51D-DeviceTypeMobileTablet %[51d.all(DeviceType,IsMobile,IsTablet)]
111 http-request set-header X-51D-Tablet %[51d.all(IsTablet)]
112
113Here, two headers are created with 51Degrees data, X-51D-DeviceTypeMobileTablet
114and X-51D-Tablet. Any number of headers can be created this way and can be
115named anything. 51d.all( ) invokes the 51degrees fetch. It can be passed up to
116five property names of values to return. Values will be returned in the same
Joseph Herlant71b4b152018-11-13 16:55:16 -0800117order, separated by the 51-degrees-property-separator configured earlier. If a
Willy Tarreau29b25312016-11-08 14:57:29 +0100118property name can't be found the value 'NoData' is returned instead.
119
120In addition to the device properties three additional properties related to the
121validity of the result can be returned when used with the Pattern method. The
122following example shows how Method, Difference and Rank could be included as one
123new HTTP header X-51D-Stats.
124
125 frontend http-in
126 ...
127 http-request set-header X-51D-Stats %[51d.all(Method,Difference,Rank)]
128
129These values indicate how confident 51Degrees is in the result that that was
130returned. More information is available on the 51Degrees web site at:
131
132 https://51degrees.com/support/documentation/pattern
133
134The above 51d.all fetch method uses all available HTTP headers for detection. A
135modest performance improvement can be obtained by only passing one HTTP header
136to the detection method with the 51d.single converter. The following example
137uses the User-Agent HTTP header only for detection.
138
139 frontend http-in
140 ...
141 http-request set-header X-51D-DeviceTypeMobileTablet %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
142
143Any HTTP header could be used inplace of User-Agent by changing the parameter
144provided to req.fhdr.
145
146When compiled to use the Trie detection method the trie format data file needs
147to be provided. Changing the extension of the data file from dat to trie will
148use the correct data.
149
150 global
151 51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.trie
152
153When used with Trie the Method, Difference and Rank properties are not
154available.
155
Dragan Dosena9800a02022-02-14 13:05:45 +0100156When using the 51Degrees V4 Hash algorithm, the hash format data file needs
157to be provided as in the following example.
158
159 global
160 51degrees-data-file '51D_REPO_PATH'/device-detection-data/51Degrees-LiteV4.1.hash
161
Willy Tarreau29b25312016-11-08 14:57:29 +0100162The free Lite data file contains information about screen size in pixels and
163whether the device is a mobile. A full list of available properties is located
164on the 51Degrees web site at:
165
166 https://51degrees.com/resources/property-dictionary
167
168Some properties are only available in the paid for Premium and Enterprise
169versions of 51Degrees. These data sets not only contain more properties but
170are updated weekly and daily and contain signatures for 100,000s of different
171device combinations. For more information see the data options comparison web
172page:
173
174 https://51degrees.com/compare-data-options