We’re really excited to present a preview of our next big development in content aware application delivery. Our Web Accelerator technology prepares your content for optimal delivery over high-latency networks; our soon-to-be announced Latitude-aware Content Optimization will further optimize it for correct rendering in the client device, no matter where the observer is relative to the content origin.
Roadmap disclaimer: This forward looking statement is for information purposes only and is not a commitment, promise or legal obligation to deliver any new products, features or functionality. Any announcements are conditional on successful in-the-field tests of this technology.
Individual binary digits have rotational symmetry and can survive transmission across equatorial boundaries intact. Layer 1 encoding schemes such as Differential Manchester Encoding are similarly immune to polarity changes and protect on-the-wire data against these effects as far as layer 4, ensuring TCP connections operate correctly. However, layer 7 content suffers from an inversion transformation when generated in one hemisphere and observed in the other.
Our solutions has been tested against a number of websites, including our own (https://splash.riverbed.com - see attachment below) with a good degree of success. In its current beta state, you can try it against other sites (YMMV).
If you haven’t got a Traffic Manager handy, download and install the Community Edition.
The following instructions explain how to proxy splash.riverbed.com. For a more general overview, check out Getting Started - Load-balancing to a website using Traffic Manager.
Now we’ll apply our content optimization. This optimization is implemented by way of a response rule:
$ct = http.getResponseHeader( "Content-Type" ); # We only need to embed client-side trafficScript in HTML content if( !string.startsWith( $ct, "text/html" ) ) break; # Will this data cross the equatorial boundary? # Edit this test if necessary for testing purposes $serverlat = geo.getLatitude( request.getLocalIP() ); $clientlet = geo.getLatitude( request.getRemoteIP() ); if( $serverlat * $clientlat > 0 ) break; $body = http.getResponseBody(); # Build client-side TrafficScript code $tsinterpreter="PHNjcmlwdCBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS45LjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLmxvb2ZsaXJwYSB7IHRyYW5zZm9ybTpyb3RhdGUoLTE4MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC0xODBkZWcpOy1tb3otdHJhbnNmb3JtOnJvdGF0ZSgtMTgwZGVnKTstby10cmFuc2Zvcm06cm90YXRlKC0xODBkZWcpOy1tcy10cmFuc2Zvcm06cm90YXRlKC0xODBkZWcpIH0NCjwvc3R5bGU+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpzZWxlY3Rvcj0iZGl2LHAsdWwsbGksdGQsbmF2LHNlY3Rpb24saGVhZGVyLHRhYmxlLHRib2R5LHRyLHRkLGgxLGgyLGgzLGg0LGg1LGg2IjsNCg0KZnVuY3Rpb24gVHJhZmZpY1NjcmlwdENhbGxTdWIoIGkgKSB7DQogICBpZiggaSUzPT0wICkgdDAoICQoImJvZHkiKSApDQogICBlbHNlIGlmKCBpJTM9PTEgKSB0MSggJCgiYm9keSIpICkNCiAgIGVsc2UgdDIoICQoImJvZHkiKSApOw0KfQ=="; $sub0="ZnVuY3Rpb24gdDAoIGUgKSB7DQogICBjID0gZS5jaGlsZHJlbihzZWxlY3Rvcik7DQogICBpZiggYy5sZW5ndGggKSB7DQogICAgICB4ID0gZmFsc2U7IGMuZWFjaCggZnVuY3Rpb24oKSB7IHggfD0gdDAoICQodGhpcykgKSB9ICk7DQogICAgICBpZiggIXggKSBlLmFkZENsYXNzKCAibG9vZmxpcnBhIiApOw0KICAgICAgcmV0dXJuIHRydWU7DQogICB9DQogICByZXR1cm4gZmFsc2U7DQp9DQo="; $sub1="ZnVuY3Rpb24gdDEoIGUgKSB7DQogICBjID0gZS5jaGlsZHJlbihzZWxlY3Rvcik7DQogICBpZiggYy5sZW5ndGggKSBjLmVhY2goIGZ1bmN0aW9uKCkgeyB0MSggJCh0aGlzKSApIH0gKTsNCiAgIGVsc2UgZS5hZGRDbGFzcyggImxvb2ZsaXJwYSIgKTsNCn0NCg=="; $sub2="ZnVuY3Rpb24gdDIoIGUgKSB7DQogICAkKCJwLGxpLGgxLGgyLGgzLGg0LGg1LGg2LGltZyx0ZCxkaXY+YSIpLmFkZENsYXNzKCAibG9vZmxpcnBhIiApOw0KICAgJCgiZGl2Om5vdCg6aGFzKGRpdixsaSxoMSxoMixoMyxoNCxoNSxoNixpbWcsdGQsYSkpIikuYWRkQ2xhc3MoICJsb29mbGlycGEiICk7DQp9DQo="; $cleanup="PC9zY3JpcHQ+"; $exec = string.base64decode( $tsinterpreter ) . string.base64decode( $sub0 ) . string.base64decode( $sub1 ) . string.base64decode( $sub2 ) . string.base64decode( $cleanup ); # Invoke client-side code from JavaScript; edit to call $sub0, $sub1 or $sub2 $call = '<script type="text/javascript"> // Call client-side subroutines 0, 1 or 2 $(function() { TrafficScriptCallSub( 0 ) } ); </script>'; $body = string.replace( $body, "<head>", "<head>".$exec.$call ); http.setResponseBody( $body );
Remember this is just in beta, and any future release is conditional on successful deployments in the field. Enjoy, share and let us know how effectively this works for you.
Excellent - I just deployed this on my test rig and it works great...
I have been looking for something a little easier to deploy to achieve similar results as the method I used previously here. This will do *just* the trick...
Thanks to Owen Garrett for all his hard work... I know this one will be a key feature that helps customers take up Stingray Traffic Manger...
You guys had me at:
Individual binary digits have rotational symmetry and can survive transmission across equatorial boundaries intact.