Index: django/conf/global_settings.py
===================================================================
--- django/conf/global_settings.py	(revision 15059)
+++ django/conf/global_settings.py	(working copy)
@@ -395,6 +395,12 @@
 DEFAULT_TABLESPACE = ''
 DEFAULT_INDEX_TABLESPACE = ''
 
+# HTTP 303 ("see other") redirects were introduced in HTTP 1.1 and as such
+# might not work correctly with very old browsers. Setting this to True
+# lets HttpResponseSeeOtherRedirect objects return the status code 302
+# instead of 303.
+REDIRECT_303_BACKWARD_COMPATIBILITY = True
+
 ##############
 # MIDDLEWARE #
 ##############
Index: django/http/__init__.py
===================================================================
--- django/http/__init__.py	(revision 15059)
+++ django/http/__init__.py	(working copy)
@@ -607,6 +607,15 @@
         HttpResponse.__init__(self)
         self['Location'] = iri_to_uri(redirect_to)
 
+class HttpResponseSeeOtherRedirect(HttpResponse):
+    def status_code(self):
+        return settings.REDIRECT_303_BACKWARD_COMPATIBILITY and 302 or 303
+    status_code = property(status_code)
+
+    def __init__(self, redirect_to):
+        HttpResponse.__init__(self)
+        self['Location'] = iri_to_uri(redirect_to)
+
 class HttpResponseNotModified(HttpResponse):
     status_code = 304
 
Index: docs/ref/request-response.txt
===================================================================
--- docs/ref/request-response.txt	(revision 15059)
+++ docs/ref/request-response.txt	(working copy)
@@ -663,6 +663,12 @@
     Like :class:`HttpResponseRedirect`, but it returns a permanent redirect
     (HTTP status code 301) instead of a "found" redirect (status code 302).
 
+.. class:: HttpResponseSeeOtherRedirect
+
+    Like :class:`HttpResponseRedirect`, but it returns a "see other"
+    (HTTP status code 303) instead of a "found" redirect (status code 302).
+    This is the preferred redirect method in the `post-redirect-get pattern`_.
+
 .. class:: HttpResponseNotModified
 
     The constructor doesn't take any arguments. Use this to designate that a
@@ -692,3 +698,5 @@
 .. class:: HttpResponseServerError
 
     Acts just like :class:`HttpResponse` but uses a 500 status code.
+
+.. _post-redirect-get pattern: http://en.wikipedia.org/wiki/Post/Redirect/Get
Index: docs/ref/settings.txt
===================================================================
--- docs/ref/settings.txt	(revision 15059)
+++ docs/ref/settings.txt	(working copy)
@@ -1380,6 +1380,26 @@
 A tuple of profanities, as strings, that will trigger a validation error when
 the ``hasNoProfanities`` validator is called.
 
+.. setting:: REDIRECT_303_BACKWARD_COMPATIBILITY
+
+REDIRECT_303_BACKWARD_COMPATIBILITY
+-----------------------------------
+
+Default: ``True``
+
+Whether to replace ``HttpResponseSeeOtherRedirect`` (HTTP 303) redirects with
+the status code 302 ("found"). The status code 303 ("see other") was introduced
+in HTTP 1.1 and might not be understood by very old clients or clients that only
+understand HTTP 1.0.
+
+This setting does only apply to ``HttpResponseSeeOtherRedirect`` objects. It
+does not affect other (custom) response objects, for example responses with
+the attribute ``status_code = 303``.
+
+If targeted clients are expected to understand HTTP 1.1 and/or the status code
+303, this setting can be changed to ``False`` in order to leave the status code
+303 untouched.
+
 .. setting:: RESTRUCTUREDTEXT_FILTER_SETTINGS
 
 RESTRUCTUREDTEXT_FILTER_SETTINGS
