For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

ashokp1's avatar
ashokp1
Icon for Altostratus rankAltostratus
Oct 02, 2025
Solved

F5 iRule for X-Country-Code not working as expected

Is it possible to insert an X-Country-Code into the F5 BIG-IP response to the client.

 

 I want to do this only for a specific URI pattern. I tried the iRule below, using HTTP_REQUEST to capture the country code when the pattern /java is matched and substituting it in the HTTP_RESPONSE, but it didn't work. Any suggestions would be greatly appreciated.

 

HTTP_REQUEST { 

if {[HTTP::uri] starts_with "/java"} {
        set country_code [whereis [IP::client_addr] country]


        log local0. "Matched /example - client IP: [IP::client_addr], country: $country_code"

        # Temporarily store country code in a header for use in HTTP_RESPONSE
        HTTP::header insert "X-Country-Temp" $country_code
    }  }

 

when HTTP_RESPONSE {

 if {[HTTP::uri] starts_with "/java"} {
    log local0. "HTTP_RESPONSE triggered for [IP::client_addr]"

        HTTP::header insert "X-Country-Code" "$country_code"
        log local0. "Added X-Country-Code: $country_code to response"
} }

 

Also I tried below in the response , but no luck

when HTTP_RESPONSE {

if {[HTTP::header exists "X-Country-Code" ]} {
    log local0. "HTTP_RESPONSE triggered for [IP::client_addr]"

        HTTP::header insert "X-Country-Code" "$country_code"
        log local0. "Added X-Country-Code: $country_code to response"
} }

  • ashokp1's avatar
    ashokp1
    Oct 22, 2025

    Thanks Jeffrey_Granier, I tried the code below which resolved my issue. Thanks for your support.

    when HTTP_REQUEST {
        if {[HTTP::uri] starts_with "/java"} {
            set country_code [whereis [IP::client_addr] country]
            log local0. "Matched /java - client IP: [IP::client_addr], country: $country_code"
            set session_key "country_[TCP::client_port]"
            table set $session_key $country_code 300
        }
    }

    when HTTP_RESPONSE_RELEASE {
        set session_key "country_[TCP::client_port]"
        set country_code [table lookup $session_key]
        if {$country_code ne ""} {
            log local0. "HTTP_RESPONSE triggered for session $session_key, country: $country_code"
            HTTP::header insert "X-Client-Country-Code" $country_code
            log local0. "Added X-Country-Code: $country_code to response"

            # Clean up the session table
            table delete $session_key
        }
    }

     

4 Replies

  • Hello ashokp1​ 

    You are injecting an HTTP Header in Request which will not exist in Response
    You should keep the value in a variable and inject it directly in Response

    when HTTP_REQUEST 
    { 
    	if {[HTTP::uri] starts_with "/java"} 
    	{
    		set country_code [whereis [IP::client_addr] country]
    	}
    }
    
     
    
    when HTTP_RESPONSE 
    {
    	if {[info exists country_code]} 
    	{
    		HTTP::header insert "X-Country-Code" "$country_code"
    	}
    }

     

  • when HTTP_REQUEST {
      set insert_country_code 0
      if {[HTTP::uri] starts_with "/java"} {
        set country_code [whereis [IP::client_addr] country]
        set insert_country_code 1
        log local0. "Matched /java - client IP: [IP::client_addr], country: $country_code"
      }
    }
    
    when HTTP_RESPONSE {
      if {$insert_country_code == 1} {
        log local0. "HTTP_RESPONSE triggered for [IP::client_addr]"
        HTTP::header insert "X-Country-Code" $country_code
        log local0. "Added X-Country-Code: $country_code to response"
      }
    }

    Hi ashokp1​ ,  

     

    F5 has a wonderful AI Assistant  🤖,  I recommend you try it out.   F5 AI Assistant | F5  something like this should accomplish what you are trying to do:  

    • ashokp1's avatar
      ashokp1
      Icon for Altostratus rankAltostratus

      Thanks Jeffrey_Granier, I tried the code below which resolved my issue. Thanks for your support.

      when HTTP_REQUEST {
          if {[HTTP::uri] starts_with "/java"} {
              set country_code [whereis [IP::client_addr] country]
              log local0. "Matched /java - client IP: [IP::client_addr], country: $country_code"
              set session_key "country_[TCP::client_port]"
              table set $session_key $country_code 300
          }
      }

      when HTTP_RESPONSE_RELEASE {
          set session_key "country_[TCP::client_port]"
          set country_code [table lookup $session_key]
          if {$country_code ne ""} {
              log local0. "HTTP_RESPONSE triggered for session $session_key, country: $country_code"
              HTTP::header insert "X-Client-Country-Code" $country_code
              log local0. "Added X-Country-Code: $country_code to response"

              # Clean up the session table
              table delete $session_key
          }
      }

       
  • Hello ashokp1​

    I see you have a few responses to assist you and wanted to encourage you to update your post if either of these have helped answer your questions. If they have please mark the post as solved, or if it has not please update with where you are at and what you may need additional help with. 

    Thank you for being a part of our community! 

    -Melissa