According to the RFC 2616, a 301 Status Code only "SHOULD" return the new URI – not "MUST": http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2
Unfortunately, Amazon AWS will sometimes do this. The following will put ROOT in an infinite loop, calling HEAD over and over again:
g = TFile::Open("s3://s3.amazonaws.com/landsat-pds/run_info.json", "");
I'll send in a pull request against v5-34-00-patches (I don't have a build environment compatible with v6, so it should be pretty easy to merge - I don't think the code has changed).