dotMobimobiThinkingmobiForgemobiReadyDeviceAtlasgoMobi
background image

Useful "X headers"

jonarne's picture
Posted by jonarne - 10 May 2008
Twitter share icon Facebook share icon Google Plus share icon

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 jonarne - 10 May 2008

jonarne's picture

John Arne has seen the mobile world both from the inside of a Telco and outside as a content provider. Currently he works as Head of Product Development in Mobiletech AS which he also co founded.

twitter
linkedin

Posted by svo9712 6 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
Sr. System Analyst
Product Service Innovation
AKTEL
Bangladesh
Cell: +88 01817 183 021

Md. Muntasir Mamun Joarder Web Developer Ipswich City Council Australia Cell: +61 42 50 49 459

Posted by arsup2 6 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:

  1. Opera:
    http://mobileopera.com/reference/ua
  2. OpenWave:
    http://odn.openwave.com/docs/devcap.pdf
  3. Avantgo:
    http://www.ianywhere.com/downloads/avantgo/chandev.pdf
    (rely upon archive.org if the link no longer points to anything).
  4. Microsoft:
    http://msdn.microsoft.com/en-us/library/aa451991.aspx
  5. jphone:
    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 6 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) 6 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 6 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 5 years ago

So, have you any updates to this list?

Posted by cranstone 5 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
5o9Me

Peter J. Cranstone
CEO 5o9 Inc

Posted by cranstone 5 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. Cranstone
CEO 5o9 Inc

Posted by rickey29 4 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 4 years ago

Quote:

x-lori-time-1: Dont know

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 4 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 2 years 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 2 years 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 TEJISINGH 31 weeks ago

HOW CAN WE OBTAIN THESE VALUES IN PHP. CAN WE RUN A NORMAL SITE ON WEB BROWSER AND CALL A PHP SCRIPT TO GET THESE HEADERS.
THANKS

Posted by Janavarrom 14 weeks ago

Hi,

Need your help.
I work in a Telco company, and try to do an mobile app, and i wanna know some especial info from the clients are using mobile network (2G,3G or 4G) when they comes to "www.mycompanytelco.cl", like:

1. Phone Number
2. Type of network (2G, 3G or 4G)
3. He is using roaming or not.

when i read your article i realize thats posible, but need more informtion about the responsability from ISP in the configuration to turn on this X-Headers.

(Sorry for my english)

Thanks a lot.

Javier Navarro
Licenciado en Ciencias de Computacion.