Apache Traffic Server has support for native C++ plugins which allow  you to make transformations to the headers and the body as the request and response passes through it. ATS&#x27;s power comes mainly from these plugins, I would say, rather than just a reverse caching proxy.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;apache&#x2F;trafficserver&#x2F;tree&#x2F;master&#x2F;lib&#x2F;atscppapi" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;apache&#x2F;trafficserver&#x2F;tree&#x2F;master&#x2F;lib&#x2F;atsc...</a><p>You can do stuff like:<p><pre><code>  &gt; registerHook(HOOK_READ_REQUEST_HEADERS_PRE_REMAP);  
  &gt; registerHook(HOOK_READ_REQUEST_HEADERS_POST_REMAP);  
  &gt; registerHook(HOOK_SEND_REQUEST_HEADERS);

  &gt; if (transaction.getClientRequest().getUrl().getQuery().find(&quot;redirect=1&quot;) != string::npos) {  
  &gt;   cout &lt;&lt; &quot;Sending this guy to google.&quot; &lt;&lt; endl;  
  &gt;   transaction.getClientResponse().getHeaders().append(&quot;Location&quot;, &quot;http:&#x2F;&#x2F;www.google.com&quot;);  
  &gt;   transaction.getClientResponse().setStatusCode(HTTP_STATUS_MOVED_TEMPORARILY);  
  &gt;   transaction.getClientResponse().setReasonPhrase(&quot;Come Back Later&quot;);  
  &gt; }  
  &gt; transaction.resume();</code></pre>