Forum Discussion
Insert header when item added to ramcache
Hi Hendel, I haven't done much with the cache in iRules, but your format for setting appears to be correct. That said, can you post a sanitized version of your iRule and whether you have any other iRules or policies that might be interfering? How are you validating that it is not working? Could use CACHE::trace to see if anything is at least being set by the system before hitting a tcpdump on the wire.
- HendelFeb 07, 2023Nimbostratus
There aren't any other rules or policies. I'd tried both insert and replace, but the logging in CACHE_RESPONSE never showed any effect from either of the UPDATE commands.
when CACHE_UPDATE { CACHE::header insert X-LTM-Cached $cache # CACHE::header replace Cache-Control $cache } when CACHE_RESPONSE { log local0. "[IP::client_addr] path:$path cache:$cache [CACHE::headers]" } when HTTP_REQUEST { set path [string tolower [HTTP::path]] if { !($path ends_with ".js") } { CACHE::disable } else { HTTP::uri [HTTP::path] CACHE::enable } } when HTTP_RESPONSE { set cache [HTTP::header value Cache-Control] HTTP::header replace Cache-Control public }
- JRahmFeb 07, 2023Admin
I updated the formatting to make it a little easier to read through...let me reach out internally to see if anyone has worked with the cache commands before, I'm not quite sure what the flow should be here.
- John_AlamFeb 08, 2023Employee
Are you using the webacceleration profile: optimized-caching?
can you post any changes you may have made.
Can you include a log statement in the CACHE_UPDATE event so we can see if it is firing?
when CACHE_UPDATE { log local0. "Caching [HTTP::uri]" }
Thanks.
- John_AlamFeb 08, 2023Employee
I did some quick testing.
1) Your iRule does not work as is, the variable 'cache' is not passed from LTM Events to Cache events. So you will run into "variable not found" TCL errors. I excluded that variable to continue testing.
2) I used the 'optimized-caching' profile which defaults to 'Minimum Object Size' of 0 bytes. I could not get the header to insert, or the CACHE_UPDATE to fire, until I increased that to 1 byte. It must be a bug of sorts.
You can see the header inserted X-LTM-Cached: test. Note , i used a static value because as i mentioned, the variable was not transfered.
One way to transfer variable is with iRule tables. Try passing from one event to another using a Table record.
HTH.
- HendelFeb 08, 2023Nimbostratus
I'm able to log CACHE::headers when I retrieve objects from the cache, it's just that they only come out with all of their original headers/values as sent by the pool member, not the ones I was trying to insert and/or modify as they went in to the cache.
- John_AlamFeb 08, 2023Employee
i used this version and was able to change the headers Cache-Control. I was also able to insert headers. No dynamic values though.
when CACHE_UPDATE { CACHE::header insert X-LTM-Cached "test" CACHE::header replace Cache-Control "private" log local0. "Cache update- path:$path cache: [CACHE::headers]" }
But you have to invalidate the cache before every expected change of behavior. You do that from the CLI with this command:
tmsh delete /ltm profile ramcache optimized-caching
and reload page twice. First reload will not have the cached version.
HTH
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com