Skip to main content Skip to search
Start Your Free Trial
Glossary of Terms

What is HTTP Header Enrichment?

HTTP Header Enrichment is the process of adding data fields in the HTTP header used by downstream servers. This is commonly used in mobile networks by adding user and device identifiers such as IMEI, IMSI, MSISDN UID or other data to identify subscriber or mobile device details.

HTTP Header Enrichment is usually done at the Gateway GPRS Support Node or at other network boundaries by gateway or edge products with this feature capability.

Additional information is typically added to HTTP headers to be processed by other systems for traffic steering, processing traffic for additional add-on services or processed by billing, analytics or subscriber application systems.

Boost Revenue with HTTP Header Enrichment in Mobile Networks

Provide unique and differentiated subscriber experiences and benefit from new service monetization opportunities with A10 HTTP header enrichment solution.

Learn How to Boost Revenue

How HTTP Header Enrichment Works

The HTTP protocol allows custom data records to be added into the HTTP header.  The format of this is usually:
X-your-data: xxxxxxxxxxxxxxxxxxxxxxxx

Injecting the MSISDN into the HTTP Header might look like:
X-MSISDN: xxxxxxxxxxxxxxxxxx

Practically anything can be added to HTTP headers.  Since HTTP is a textual protocol, processing this information later is a simple operation

Example Use Case

A use case example is presented.  The code to implement this with the A10 aFleX language is presented in the next section.
Adding the MSISDN Subscriber information to the HTTP Header.

  1. Parse the Username from the instream HTTP Header.  This is the network Subscriber Username already existing in the HTTP headers.
  2. Query the provider Radius server with the Username and retrieve the related MSISDN for this specific Subscriber
  3. Inject the data X-msisdn and related data into the HTTP Header

Code Sample


# aFleX script to provide Header Enrichment for
# the purpose of policy based Traffic Steering.
#
# This comes in 2 parts.
# 1) Script that is bound to a RADIUS VPORT.
# 2) Script that is bound to a HTTP VPORT.
# Virtual Server Port: RADIUS
#
when RULE_INIT {
    set ::DEBUG 0
}
when CLIENT_DATA {
    binary scan [RADIUS::avp 40] H* avp40
    if { ($::DEBUG == 1) } { log "RADIUS == User-Name=[RADIUS::avp 1], User-Password=[RADIUS::avp 2], Framed-IP-Address=[RADIUS::avp 8], Filter-Id=[RADIUS::avp 11], Calling-Station-Id=[RADIUS::avp 31], Acct-Status-Type=$avp40" }
    if { $avp40 == 1 } {
        table set msisdn [RADIUS::avp 8] [RADIUS::avp 31] indef
        table set policy [RADIUS::avp 8] [RADIUS::avp 11] indef
        if { ($::DEBUG == 1) } { log "RADIUS == TABLE SET MSISDN: [table lookup msisdn [RADIUS::avp 8]] - POLICY: [table lookup policy [RADIUS::avp 8]]" }
    } elseif { $avp40 == 2 } {
        table delete msisdn [RADIUS::avp 8]
        table delete policy [RADIUS::avp 8]
        if { ($::DEBUG == 1) } { log "RADIUS == TABLE DELETE MSISDN: [table lookup msisdn [RADIUS::avp 8]] - POLICY: [table lookup policy [RADIUS::avp 8]]" }
    }
}
#
# Virtual Server Port: HTTP
#
when RULE_INIT {
    set ::DEBUG 0
}
when HTTP_REQUEST {
    HTTP::header insert MSISDN [table lookup msisdn [IP::client_addr]]
    HTTP::header insert User-Type [table lookup policy [IP::client_addr]]
    if { ($::DEBUG == 1) }
        { log "HTTP == MSISDN: [table lookup msisdn [IP::client_addr]] - POLICY: [table lookup policy [IP::client_addr]]" }
}

How A10 Networks Can Help

The A10 Networks Thunder platform of products provides a broad set of network and security features.

< Back to Glossary of Terms