Below are my 2c: 1. TS-3663 tracks some caching improvements/options that you described.
3. I'm not entirely sure to agree with the chaining approach. We have use cases where the redirects can go as deep as 20 times (in fact, FF and Chrome IIRC allow up to 20 redirects). I believe we set it to 10 in our prod. Having to create up to 10 TXNs for a single client request seems very inefficient and could get quite tricky to debug/understand. Thanks, Sudheer On Thursday, June 4, 2015 9:39 AM, James Peach <jpe...@apache.org> wrote: Hi all, There's been a lot of discussion on IRC about following redirects in ATS, and I thought it might be helpful to give my thoughts on the two useful approaches and establish some terminology. Logically, the HTTP redirects form a chain of HTTP requests, where each link is given by the Location header. Each link can have a separate cache policy, origin, etc. The way I see it, following redirects on the server side can have two different implementations, let's call them "chaining" and "collapsing". The chaining approach. In this implementation, the when the server follows each link in the redirect chain, it populates the cache with a separate object for each link. Each object has a distinct cache key. In fact, this is exactly what would result from an HTTP client following a redirect chain. This implies that for each link in the chain, plugins should see start and end transaction events. It also implies that if cache policy is not correctly specified, following links might always need to go back to the origin. Of course, this could be desirable in some deployments. The collapsing approach. The main difference with the collapsing approach is that the links of the chain are never stored in the cache. Instead, the server traverses the redirect chain and stores the final object under the cache key of the first link in the chain. I think that how this is presented to plugins is an open question. I'd argue that it should be largely hidden, since the model is that the final link in the chain *becomes* the response for the first link. The chain collapses as if it were never there. Note that the approaches also imply differences in how requests are logged, and how they are finally stored. If there are a large number of redirect chains leading to common objects, perhaps chaining is preferable. If redirects are used for compatibility or are a fixed implementation artifact, perhaps collapsing is better. As for Traffic Server, I think that it would be desirable to support both models, provided the default is chosen wisely, and that the semantics of each approach are well defined. When reviewing plugin APIs and configuration, we need to think clearly about which model these changes are being made for and explain and justify them in that light. James