on 6/23/03 2:10 AM Upayavira wrote: > I've worked out how I'd like to implement permanent redirects. I'd appreciate > comments as to whether this approach is okay. I would rather have comments > before just doing it... > > Add to o.a.c.environment: > > public interface PermanentRedirector { > > void redirectPermanently(boolean sessionmode, String url) throws IOException, > ProcessingException; > } > > Make HttpEnvironment and HttpResponse implement this interface. > HttpEnvironment.redirectPermanently() calls HttpResponse.redirectPermanently(). > HttpResponse.redirectPermanently() sets the status to > SC_MOVED_PERMANENTLY and sets a 'location' header in the response. > > Then the RedirectToNodeBuilder needs to be extended to handle a 'permanent' > attribute for the <map:redirect-to> node. > > Finally, in RedirectToURINode.invoke(), test to see if both the permanent attribute > has been set, and the current Redirector implements PermanentRedirector, and if > so, call redirectPermanently() instead of just redirect(). > > I think that does it. Am I breaking any contracts, or extending the sitemap > language when I shouldn't be? > > So, why permanent redirects? > > A 301 (Permanent Redirect) informs the user agent that a URL has changed > permanently, and to use the new one form there onwards. Caching of the new > page is as usual. > > A 302 (Temporary Redirect) informs the user agent and any proxy servers in > the loop that a URL has changed temporarily, and may change again. The > user agent and any proxy servers will _not_ cache the new page. So 302's put an > extra load on the server and all elements downstream of it as the pages are not > cached. > > And that's why 301s are better if the page has moved permanently, but 302s > are fine for a temporary change.
+1 for me. -- Stefano.