Как избежать 301 перенаправления кеширования - PullRequest
13 голосов
/ 26 января 2012

Это дополнительный вопрос к Использование перенаправлений 301/303/307 для динамических коротких URL-адресов , где я пытаюсь определить лучший способ реализации перенаправления коротких URL-адресов, когда URL-адрес назначения будет часто меняться.основа.

Хотя кажется, что перенаправления 301 и 307 выполняют оба действия одинаково, меня беспокоит проблема кеширования перенаправления 301 (как описано здесь ) - лучший способ избежать этоговместо этого использовать перенаправления 307 (я предполагаю, что перенаправления 307 никогда не будут кэшироваться?) или явно отправлять заголовок без кэширования («Cache-Control: no-cache, must-revalidate»)?

Ответы [ 2 ]

19 голосов
/ 05 марта 2012

Не пытайтесь избежать 301 кеширования. Если вы не хотите, чтобы какой-либо пользовательский агент кэшировал ваше перенаправление, просто не используйте перенаправление 301. Другими словами, кеширование 301 уже здесь, и семантически это перенаправление постоянное , поэтому, если вы планируете изменить целевой URL, 301 не является правильным кодом состояния для использования. С другой стороны, 307 ответов не кэшируются по умолчанию .

10 голосов
/ 07 октября 2013

В ситуациях, когда вам нужно поведение, которое вызывает перенаправление 301, например, обновление закладок браузера и изменение URL-адреса в боте Google, но в то же время вы хотите отслеживать перенаправления или выполнять какие-либо другие функции, которые вы можете всегда добавляйте заголовки элемента управления кешем в «no cache»

HTTP/1.0 301 Moved Permanently
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Location: http://example.com

В php это выглядит так:

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Location:'.$url, true, 301);

Связанный: https://stackoverflow.com/a/19003320/175071

...