in working scenario, client is sending 1st request as POST, and server sending 302 response. And subsequent requests are GET with 304 (not modified) response from server. However, in non working scenario client is sending 1st request as GET and getting 200 ok response from server and 304 subsequent requests
There was actually a good thread related to this idea a few days back:
https://devcentral.f5.com/questions/url-redirect-looses-post-data
The 307 status code is intended to preserve the client request, so you're iRule slightly modified might look like this:
when HTTP_REQUEST {
if { [string tolower $uri] contains "/cat" } {
HTTP::respond 307 Location "https://$static::http_throttle_catURL$uri"
}
}