Useful "X headers"

My hobby for a while has been to collect "X-headers". X-headers are fields in the request HTTP header beginning with an X. Put simply. These fields are kind of non-standard or proprietary add-ons to the regular fields in the HTTP header. These can be used for all kinds of fun stuff when building mobile portals. I have made a collection of some x-headers here.
Usually it is smart to blog about stuff you know. I will be the first to admit that I am on thin ice here, but I hope someone out there becomes a tiny bit more enlightened by this post.
X-headers can be used for many different things: User identification, device recognition, probing for network characteristics and much more. This information is useful both in terms of creating a good mobile experience and in terms of statistics.
I have listed a selection of headers below from devices that have visited my site. I don't know what all of these mean; many can be "man made" for all I know, but it's still interesting. If I am wrong about some, or you have additional information, please comment.
These are headers we already know very well.
| Header name | What it means |
|---|---|
| x-forwarded-for | Originating IP of a client connection to the server |
| x-forwarded-host | Origination host name |
| x-forwarded-server | Originating server name |
| x-wap-profile | A reference to the user-agent profile as specified. |
| x-wap-profile-diff | The wap gateway or proxy can choose to override the UA-profile. The diff is specified here. |
Other interesting headers:
| Header name | What it means |
|---|---|
| x-apn-id: | Identifies the Access Point Name. Wap, internet, email etc. can have different APNs |
| x-charging-id: | Anyone know this? It had no value |
| x-drutt-3pi-request-uri | Drutt is a business support system, bought by Ericsson. What this header means? Don't know... |
| x-drutt-3pi-serviceid | Dont know. |
| x-drutt-device-id | Identifies the device by name. For example: "Nokia_N95__S60_browser_" |
| x-drutt-request-id | Usage, unknown. |
| x-ebo-ua: | Usage, unknown. |
| x-ggsnip: | Contains the IP of the GGSN in the network. |
| x-h3g-cc | Usage, unknown. A header from Three, this... |
| x-h3g-client-ip | The current IP of the device in the network. Identifies session. |
| x-h3g-customer-subtype | Identifies the customers subscription type. |
| x-h3g-customer-type | Identifies the type of customer. |
| x-h3g-device-name | Name of the device. Example value: Nokia-N95-Safari |
| x-h3g-nc | Dont know. Had the value "4". |
| x-h3g-network-quality | Type of network. "3G" for example. |
| x-h3g-party-country | Identifies the home country of the user |
| x-h3g-party-id | Dont know. |
| x-h3g-party-status | Dont know |
| x-h3g-party-user-id | Dont know |
| x-h3g-roaming-status | Identifies if the user is roaming. Bool value |
| XID: | Dont know |
| x-jphone-color | Some softbank stuff |
| x-jphone-display | Screen size. |
| x-jphone-msname | Dont know. example value: 821P |
| x-jphone-region: | Dont know |
| x-jphone-smaf | Dont know.Example value "40/pcm" |
| x-jphone-uid: | A garbled unique identifier of the user |
| x-lori-time-1: | Dont know |
| x-net-info | Dont know. |
| x-network-info: | Contains bearer (i.e. GPRS) internal IP address etc. |
| x-os-prefs: | Tells something about the capabilities of the device. Example value: "fw:240; fh:320; cd:24c; pl:3; pj:1; pa:1;pi:1;ps:2;" |
| x-proxy-id: | Dont know. |
| x-psp-browser | The Playstation Portable browser version |
| x-psp-productcode | Dont know. The value is "CEL" |
| x-roaming: | Roaming info. Values "Yes" or "No" |
| x-sgsnip: | The IP address of the SGSN |
| x-source-id | Dont know |
| x-wapipaddr: | IP address of the wap gateway. |
| x-wap-proxy-cookie: | A cookie? |
| x-wsb-contextid | Dont know. Some Vodafone stuff? |
Headers from OpenWave gateways. I am not too familiar with this, so I'll just refer to the wirelessFAQ
| Header name | What it means |
|---|---|
| x-up-calling-line-id: | End users phone number |
| x-up-devcap-accept-language: | Similar to the accept-language header |
| x-up-devcap-cc: | Dont know. Value is "1" |
| x-up-devcap-charset: | Charset |
| x-up-devcap-charset: utf | Charset stuff |
| x-up-devcap-immed-alert: | Dont know |
| x-up-devcap-iscolor: | Defines if the device has a color screen. Bool |
| x-up-devcap-max-pdu: | Max size of payload. |
| x-up-devcap-msize: | Dont know. |
| x-up-devcap-numsoftkeys: | Numbers of softkeys on the device |
| x-up-devcap-screen-chars: | Numbers of characters that fits on one line? |
| x-up-devcap-screendepth: | Color depth |
| x-up-devcap-screenpixels: | Screen size in ipxels |
| x-up-devcap-smartdialing: | Dont know what smart dialing is, might be the "click to call" function |
| x-up-devcap-softkeysize: | Dont know |
| x-up-fax-accepts: | Dont know |
| x-up-fax-limit: | Dont know? |
| x-up-subno: | Some kind of identifier of the end user |
| x-up-uplink: | Seems like the dns name of the wap gateway |
| x-up-wappush-secure: | Dont know |
| x-up-wappush-unsecure: | Dont know |
| x-up-wtls-info: | Dont know. |
Nokia wap gateway headers:
| Header name | What it means |
|---|---|
| x-nokia-alias | The end users phone number. encrypted. |
| x-nokia-bearer: | i.e. GPRS |
| x-nokia-connection_mode | typically TCPIP |
| x-nokia-gateway-id: | Identifies the wap gateway. Seems similar to the use of the Via header |
| x-nokia-imsi: | Imsi value |
| x-nokia-ipaddress: | Internal IP address |
| x-nokia-localsocket: | Internal IP and a portnumber. |
| x-nokia-msisdn: | The users phone number in plain text. |
| x-nokia-musicshop-bearer | Nokias music shop. Typically "GPRS/3G" |
| x-nokia-musicshop-version: | Nokias music shop. The version. |
| x-nokia-prepaidind: | Something to do with the type of subscription. The value is "4" |
Transcoder headers
| Header name | What it means |
|---|---|
| x-novarra-device-type: | A Novarra header. Dont know the usage. The value is "0" |
| x-operamini-features: | Header added by the Opera Mini proxy. Values are "advanced, download, camera, folding, inputhints" |
| x-operamini-phone: | The phone name provided by the Opera Mini proxy. |
| x-operamini-phone-ua: | The original user-agent of the device using a Opera Mini browser |
| x-original-user-agent: | Googles transcoders way to pass the device' user agent to the server. |
| x-surfopen-msisdn: | Some SurfOpen stuff. The value idicates that it is created by humans |
| x-moz: | Dont know, but seems to define some kind og proxy behaviour. The value is "prefetch". |
| x-bluecoat-via | Not sure what this is, but probably related to bluecoat. Is it transcoding? |
| x-mobile-gateway: | Identifies the gateway/proxy. In this case: "Novarra-Vision/6.9 (TELIASONERA; Server-Only)" |
| x-mobile-ua: | This is the Mowser way of transmitting the original user agent |
| x-device-accept: | The device' original accept headers when squezed through a transcoder. In this case; Novarra. This behaviour is recommended by w3c |
| x-device-accept-charset: | se above |
| x-device-user-agent: | se above |
Headers that can be used to identify the end user:
| Header name | What it means |
|---|---|
| x-drutt-client-ip | Probably the current IP of the handset. The value is an internal IP in the 10. range |
| x-drutt-portal-user-id | A unique ID of the user in the drutt system. |
| x-drutt-portal-user-msisdn | The mobile phone number. |
| x-h3g-msisdn | the phone number. |
| x-imsi: | The imsi number. Identifies the end user. |
| x-msisdn | The end users phone number |
| x-nas-ip: | Dont know. The value is an internal IP |
| x-wap-clientid: | Seems like a unique identifier of the user. |
| x-wap-personalization: | Internal IP of the device in the telecom network |
| x-wsb-identity | End users phone number |
| x-wte-msisdn: | Indicates that the value is a phone number. Does not look like that... |
| x-nokia-imsi: | Imsi value |
| x-nokia-alias | The end users phone number. encrypted. |
| x-nokia-msisdn: | The users phone number in plain text. |
| x-up-calling-line-id: | End user identifier |
AvantGo headers.
| Header name | What it means |
|---|---|
| x-avantgo-browser | Identifies the AvantGo browser |
| x-avantgo-channelid | Self explaining |
| x-avantgo-clientcharset | Charset used in the client |
| x-avantgo-clientlanguage | Language code for the cloent |
| x-avantgo-colordepth | Value: "MTY" |
| x-avantgo-cradlesync | Value: "TRUE" |
| x-avantgo-deviceid | String identifying the device. |
| x-avantgo-deviceos | The operating system? |
| x-avantgo-deviceosversion | Os version? |
| x-avantgo-deviceprocessor | Processor? |
| x-avantgo-platformdata | ? |
| x-avantgo-screensize | A string providing the screen size? Exampe value: "MTUweDo1MA" |
| x-avantgo-tracking-referer | ? |
| x-avantgo-url | If it is an url, it is encrypted. |
| x-avantgo-userid | Identifying the end user. |
| x-avantgo-version | The version of AvangGo |




Posted by svo9712 5 years ago
Hi Jon
Great article. Actually I was also doing some self research on this type of man-made HTTP headers. Nicely you have listed those down. Hope from everyones response we will get the description of these personalized headers.
So far I understand, these headers are added by the WAP Gateway while passing. I was looking for any reference on "How to add extra headers". I mean if I want to work with Kannel WApGW, can I modify the Kannel code to add some extra header variable.
Muntasir Mamun Joarder
Md. Muntasir Mamun Joarder Web Developer Ipswich City Council Australia Cell: +61 42 50 49 459Sr. System Analyst
Product Service Innovation
AKTEL
Bangladesh
Cell: +88 01817 183 021
Posted by arsup2 5 years ago
A useful article -- it presented several exotic HTTP header fields that I had never seen so far.
Many of the listed extra fields are however well-known and thoroughly described in the relevant technical documentation. Since this is certainly of general interest, here it is:
http://mobileopera.com/reference/ua
http://odn.openwave.com/docs/devcap.pdf
http://www.ianywhere.com/downloads/avantgo/chandev.pdf
(rely upon archive.org if the link no longer points to anything).
http://msdn.microsoft.com/en-us/library/aa451991.aspx
http://creation.mb.softbank.jp/download.php?docid=102
(documentation in Japanese -- and you might have to register as a Softbank developer).
Enjoy.
E. Casais
areppim AG
Berne
Switzerland
Posted by robohofo 5 years ago
It might be interesting to know that the Openwave WAP Gateway allows carriers to configure their own x-* headers.
The Gateway has a feature where carriers can define the name of the x-* header and populate it with data that is available within the Gateway, plus specify which site(s) will see this x-header.
This has been put into place to allow carriers to embed important information (mostly authentication related) and forward to internal services or partner services.
Depending on the configuration this might be seen elsewhere and thus all kind of interesting stuff might come up.
Cheers, Robert
Robert Oberhofer
Posted by Sony AK (not verified) 4 years ago
Hi jonarne,
Great post, I just want to ask, some operators/carriers send the MSISDN number through the HTTP header (e.g. using x-up-calling-line-id or x-msisdn or else). Is it OK? I mean in the term of privacy.
Sony AK
Mobitrek Indonesia
http://m.mobitrek.com/
Posted by jonarne 4 years ago
Hi.
It depends on the local regulations. In most countries I would guess you would need some kind of agreement (often called CPA agreement) with the mobile operator. For ensuring the privacy... On the other hand I do know of operators that are forwarding the msisdn by default, no agreement needed.
--
Jon Arne S.
Posted by wasia 4 years ago
So, have you any updates to this list?
Posted by cranstone 3 years ago
We just released some free mobile applications (Blackberry & Windows Mobile) that allow you to add your own custom X header fields to HTTP. The app also allows you to access device side data like GPS and Cell Tower ID and then include that as well. All this is done via the Mobile browser so now you can use this new data to drive more relevant and interesting web applications.
Peter Cranstone
Peter J. Cranstone5o9Me
CEO 5o9 Inc
Posted by cranstone 3 years ago
Here are some new X Headers for you...
Location:
HTTP_X_CELL_TOWER_CURRENT_ID="0"
HTTP_X_CELL_TOWER_CURRENT_SIGNAL_STRENGTH="-256"
HTTP_X_CELL_TOWER_CURRENT_TIME="5/15/2009 6:13:4 GMT/Zulu"
HTTP_X_CELL_TOWER_PREVIOUS_ID="13338"
HTTP_X_CELL_TOWER_PREVIOUS_TIME="5/14/2009 13:58:17 GMT/Zulu"
HTTP_X_CELL_TOWER_SIGNAL_PREVIOUS_STRENGTH="-70"
HTTP_X_GPS_CURRENT_ALTITUDE="-1962.0 m"
HTTP_X_GPS_CURRENT_DIRECTION="335.5829"
HTTP_X_GPS_CURRENT_LATITUDE="39.474105"
HTTP_X_GPS_CURRENT_LONGITUDE="-104.912521"
HTTP_X_GPS_CURRENT_SPEED="20.93 m/s"
HTTP_X_GPS_CURRENT_TIME="5/14/2009 11:44:16 GMT/Zulu"
HTTP_X_GPS_PREVIOUS_ALTITUDE="-1962.0 m"
HTTP_X_GPS_PREVIOUS_DIRECTION="357.64343"
HTTP_X_GPS_PREVIOUS_LATITUDE="39.474105"
HTTP_X_GPS_PREVIOUS_LONGITUDE="-104.912521"
HTTP_X_GPS_PREVIOUS_SPEED="26.93 m/s"
HTTP_X_GPS_PREVIOUS_TIME="5/14/2009 11:43:58 GMT/Zulu"
Owner Information:
HTTP_X_EMAIL_ADDRESS="john.doe@5o9inc.com"
HTTP_X_NAME="John Doe"
HTTP_X_ZIPCODE="96849"
Custom Data Fields:
HTTP_X_ME_CUSTOM_ITEM_1="1"
HTTP_X_ME_CUSTOM_ITEM_2="2"
HTTP_X_ME_CUSTOM_ITEM_3="3"
HTTP_X_ME_CUSTOM_ITEM_4="4"
Device:
HTTP_X_BROWSER_HEIGHT="480"
HTTP_X_BROWSER_VERSION="4.6.0.167"
HTTP_X_BROWSER_WIDTH="320"
HTTP_X_CARRIER="SRVC=0 TYPE=7"
HTTP_X_DEVICE_OS="4.6.0.167 (Platform 4.0.0.157)"
HTTP_X_DEVICE_TYPE="BlackBerry 9000"
HTTP_X_SCREEN_COLORS="65536"
HTTP_X_SCREEN_HEIGHT="480"
HTTP_X_SCREEN_RESOLUTION="Horz=8547PPM Vert=8547 PPM"
HTTP_X_SCREEN_WIDTH="320"
Windows Mobile Specific Fields:
HTTP_X_ME_ALLOW_ALL_DOMAINS="No"
HTTP_X_ME_CONVERT_NMEA="Yes"
HTTP_X_ME_DSR_SENSITIVITY="Yes"
HTTP_X_ME_JSAPI_ALLOW="Yes"
HTTP_X_ME_JSAPI_VERSION="JSAPI/1.2.3
Cheers,
Peter
Peter J. CranstoneCEO 5o9 Inc
Posted by rickey29 3 years ago
Hello,
What are the most critical "X-Headers" among the above ones?
I am developing a transcoding proxy, I want forward the real end users' information to web sites, such as their IP addresses. While, I can not make all above "X-Headers", at least in a short time. What are the mandatory "X-Headers" I should implement?
Thanks for your time.
Rickey
Posted by registryschmegistry 3 years ago
I can shed some light on this one, this is a header added by the Firefox add-on LORI (Life-Of-Request Info.) Link: https://addons.mozilla.org/en-US/firefox/addon/1743
I think it adds a timestamp to the field which it then uses to work out how long it took for the server to respond. eg HTTP_X_LORI_TIME_1=123456789876
Posted by isuchan 2 years ago
Hi,
I'd like to work with x-headers too. But my question is, do we need to configure our Apache httpd.conf to make it accept x-headers?
thank you
Posted by jddcef 1 year ago
Hi Jonare, I've got a collection of HTTP Headers for you over a few years from a few test devices:
Here is the current file http://wap.defza.com/ua/ua.txt
But you can also look at http://wap.defza.com/ua/ua1.txt ... ua2.txt etc
Posted by ravi_tandon 1 year ago
Hi,
I am adding x-imsi=123456789123456 in the HTTP header in the GET request to identify the user at my portal, but
as soon as this change is added, the browsing stops and just re-transmission of GET request and response as 200 OK , goes on and on...
Can somebody please help? And tell what might be getting wrong with this approach
Regards,
Ravi
Posted by cheapjerseygdd 43 weeks ago
Peyton Manning Jersey
devilesVon Miller Jersey
Brian Dawkins Jersey
Elvis Dumervil Jersey
Champ Bailey Jersey
Willis McGahee Jersey
Brady Quinn Jersey
Demaryius Thomas Jersey