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.

Fixup Cache Control Headers

Problem this snippet solves:

Coalesce all instances of a header in the response into a single comma-delimited header. This is primarily used to work around a bug in RAMCache, ID360047, where it only examines the last Cache-Control response header.

Code :

when RULE_INIT {
# A list of headers; for each header, take all instances of that header and
# combine them into a single (comma-delimited) header.
#
# e.g.
# Cache-Control: private
# Cache-Control: max-age=0
#    is translated into:
# Cache-Control: private, max-age=0
#
# Headers listed here MUST be defined as a list in the HTTP RFC.
# See the definition of Cache-Control and WWW-Authenticate for examples
# (http://tools.ietf.org/html/rfc2616#section-14.9)
#set static::headers { "Cache-Control" "WWW-Authenticate" }
set static::headers { "Cache-Control" }

# Enable/disable diagnostic logging.  Set to 1 to enable, 0 to disable
set static::debug 0
}

when HTTP_RESPONSE {
foreach header $static::headers {
if {[HTTP::header exists $header]} {
# Grab the values as a list, remove the existing headers, and
# replace with the values, joined as a comma-delimited string
set from_values [HTTP::header values $header]
set to_values {}
foreach value $from_values {
set value [string trim $value]
if { $value ne ""} { lappend to_values $value }
}
set to_values [join $to_values ", "]
if { $static::debug } { log local0. "Coalescing $header from '$from_values' to '$to_values'" }

HTTP::header remove $header
HTTP::header insert "lws" $header $to_values
}
}
}
Published Mar 17, 2015
Version 1.0
No CommentsBe the first to comment