Это полностью зависит от того, почему вы делаете перенаправление. Я предполагаю, что вы прочитали RFC 2616 .
Вы не хотите использовать 301, за исключением потенциально таких вещей, как переименование страниц. Я не знаю ни одной CMS, которая делает это автоматически.
Клиенты с возможностью редактирования ссылок должны автоматически
повторно связать ссылки на Request-URI с одним или несколькими новыми
ссылки, возвращаемые сервером, где это возможно.
302 отлично подходит для временного GET-after-GET и по умолчанию не кэшируется. Его не следует использовать для GET-after-POST, так как на самом деле это означает POST-after-POST (после запроса у пользователя подтверждения):
Примечание: RFC 1945 и RFC 2068 указывают, что клиент не разрешен
изменить метод по перенаправленному запросу. Однако большинство
существующие реализации пользовательских агентов обрабатывают 302, как если бы это было 303
ответ, выполняя GET для значения поля Location независимо
оригинального метода запроса. Коды состояния 303 и 307 имеют
были добавлены для серверов, которые хотят однозначно дать понять, какие
от клиента ожидается такая реакция.
303 для GET-после-POST. Старые браузеры могут не поддерживать его, поэтому вы можете не использовать его для GET-after-GET:
Примечание: многие пользовательские агенты до HTTP / 1.1 не понимают 303
статус. Когда совместимость с такими клиентами является проблемой,
Вместо этого можно использовать код состояния 302, так как большинство пользовательских агентов реагируют
на ответ 302, как описано здесь для 303.
307 для POST-after-POST (после подтверждения пользователем). Его можно использовать для GET-after-GET, но в этом случае вы также можете использовать 302/303:
Если код 307 получен в ответ на запрос другого
чем GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять
запрос, если он не может быть подтвержден пользователем, так как это может
изменить условия выдачи запроса.
Что касается совместимости, я не удивлюсь, если значительный процент (1%?) Пользователей будут работать за сломанными прокси, которые не понимают 303 или 307, даже если они утверждают, что поддерживают HTTP / 1.1. Мех.