Переспрямування HTTP: 301 (постійне) проти 302 (тимчасове)


381

Чи повинен клієнт поводитись інакше? Як?


RFC 2616 - коди статусу HTTP Я можу повторити все, що там, але це чітко
викладено

2
Варто зазначити, що специфікація також надає 303 та 307 коди статусу для більш нюансованих тимчасових переадресацій.
Патрік МакЕлхані

303 і 307 насправді більше не потрібні. 303 повинен був вказати, що нова URL-адреса пов'язана, але не еквівалентна, і її слід завантажувати GET, навіть якщо поточний запит був POST, але браузери так само роблять це з 302. 307 повинен був чітко вказати, що переспрямування є тимчасовим, на відміну від 302, яке не вказувало, чи є тимчасовим, але браузери та сканери так чи інакше трактують 302.
thomasrutter

Відповіді:


569

Статус 301 означає, що ресурс (сторінку) переміщується назавжди на нове місце. Клієнт / браузер не повинен намагатися запитувати оригінальне місцеположення, але використовувати нове місце з цього моменту.

Статус 302 означає, що ресурс тимчасово розташований десь в іншому місці, і клієнт / браузер повинен продовжувати запитувати оригінальну URL-адресу.


12
Дякую. Чи означає це, що якщо я використовую 301 (постійне) переспрямування, клієнт може вирішити більше ніколи не отримувати старе місце розташування і замість цього завжди використовувати безпосередньо нову URL-адресу?
flybywire

18
Саме так! Насправді, згідно зі специфікаціями, клієнт ДОЛЖЕН завжди відправлятися на нове місце.
Філіп Лейбаерт

7
Але в браузері, як це впливає? Переписувати історію, наприклад, кнопкою "Назад", щоб у 301 не повернутися до неправильної? Тихо змінюючи закладку на 301, якщо натиснути стару?
Хаві Монтеро

9
@XaviMontero Більшість сучасних веб-переглядачів кешують 301 і не будуть турбуватися взагалі запитувати оригінальне джерело до 6 місяців
Jon

34
Намагайтеся запам'ятати коди HTTP-статусу 301-> Перм і 302-> Температура Переадресація Два починається з T, так само, як Тимчасове починається з T.
ScottCate

108

Коли павук пошукової системи виявляє код статусу 301 у заголовку відповіді веб-сторінки, він розуміє, що ця веб-сторінка більше не існує, він шукає заголовок місцезнаходження у відповідь, вибирає нову URL-адресу та замінює індексовану URL-адресу новою, а також передає сторінкуrank .

Отже пошукова система оновлює всю індексовану URL-адресу, яка більше не існує (301 знайдено) з новою URL-адресою, це збереже ваш старий трафік веб-сторінки, перейде сторінка і перенаправить його на нову (ви не втратите трафік старої веб-сторінки).

Веб-переглядач: якщо браузер знайде код статусу 301, то він кешує відображення старої URL-адреси з новою URL-адресою, клієнт / браузер не буде намагатися запитувати вихідне місце розташування, але використовуватиме нове місце з цього моменту, якщо кеш не очищений.

введіть тут опис зображення

Коли павук пошукової системи знайде статус 302 для веб-сторінки, він лише тимчасово перенаправить на нове місце і сканує обидві сторінки. Стара база URL-адрес веб-сторінки все ще існує в базі даних пошукової системи, і вона завжди намагається запросити старе місце розташування та сканувати його. Клієнт / браузер все ще намагатиметься запросити оригінальне місцезнаходження.

введіть тут опис зображення

Детальніше про те, як його реалізувати в asp.net c # та який вплив на пошукові системи читайте тут: http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

Здебільшого 301 проти 302 важливі для індексації в пошукових системах, оскільки їх сканери враховують це та передають PageRank при використанні 301.

Дивіться відповідь Пітера Лі для більш детальної інформації.


20

301 полягає в тому, що запитуваному ресурсу було призначено новий постійний URI і будь-які майбутні посилання на цей ресурс повинні бути виконані за допомогою одного з повернених URI.

302 полягає в тому, що запитуваний ресурс тимчасово знаходиться під іншим URI.

Оскільки перенаправлення може бути змінено з певного часу, клієнт повинен продовжувати використовувати URI-запит для майбутніх запитів.

Ця відповідь підлягає кеш-пам'яті лише у випадку, якщо вона вказана в полі заголовка кеша або закінчується.


1
Отже, 301 має сенс, але мені важко придумати хороший приклад використання для 302 .
Боб Штейн

4
@ BobStein-VisiBone, наприклад, переспрямування 302: створіть файл old.php з кодом <?php header("location: http://example.com/new.php"); ?>і файл new.php - <?php echo 'I am new'; ?>і перейдіть за посиланням . Там буде переспрямовано та відобразиться текст "Я новий". Потім замініть код на old.php на, <?php echo 'I am old'; ?>а також перейдіть за посиланням . Ви побачите текст "Я старий". Якщо ви виконали переспрямування 301 у old.php, ви побачили б текст "Я новачок" навіть після зміни коду old.php.
Апостол

2
@ BobStein-VisiBone У мене сторона застаріла і не може бути показана. Нам потрібно створити нову сторінку, але деякий час вона не буде готова. Ми використовуємо тимчасовий перенаправлення на існуючу сторінку, яка нам корисна для відвідувачів. Після створення нової сторінки ми будемо використовувати постійне переспрямування на неї.
EddieC

4
302 корисно, якщо ваша цільова URL-адреса залежить від стану.
Брайан

7
Я зараз пройшов деякий час, але ось хороший приклад. Веб-комікси зазвичай мають URL-адресу, що призводить до останніх коміксів. Якщо це так webcomic.com/latestі переспрямовується на webcomic.com/some-comic-title301, браузер завжди буде перенаправляти на "some-comic-title". Навіть коли був опублікований черговий комікс, а "останній" зараз переспрямовується на "інший-комічний заголовок" ... Ось де 302 було б краще.
hsan

17

301 переадресації кешуються на невизначений термін (принаймні, у деяких браузерах).

Це означає, що якщо ви налаштуєте номер 301, перейдіть на цю сторінку, ви не тільки будете переспрямовані, але й переспрямування буде кешовано.

Коли ви знову відвідуєте цю сторінку, Ваш браузер * навіть не намагається запитувати цю URL-адресу, він просто переходить до кешованої цілі переадресації.

Єдиний спосіб скасувати номер 301 для відвідувача, який переспрямує кеш, - це перенаправлення назад до початкової URL-адреси **. У такому випадку браузер помітить цикл і, нарешті, дійсно запитає введену URL-адресу.

Очевидно, що це не варіант, якщо ви вирішили 301 у facebook чи будь-який інший ресурс, який ви не повністю контролюєте.

На жаль, багато постачальників хостингових послуг пропонують функцію в інтерфейсі адміністратора, який просто називається "Перенаправлення", який робить переадресацію 301. Якщо ви використовуєте це для тимчасового переадресації свого домену на facebook як найближчу сторінку, ви, в основному, накручені.

* принаймні Chrome і Firefox відповідно до того, як довго браузери кешують HTTP 301? . Щойно спробував це з Chrome 45. Редагувати: Safari 7.0.6 на Mac також кешується, перезавантаження браузера не допомогло (Посилання говорить, що в Safari 5 в Windows це допомагає.)

** Я спробував javascript window.location = '', тому що це було б рішення, яке можна застосувати в більшості випадків - воно не працює. Це призводить до невиявленого нескінченного циклу. Однак php все-таки header('Location: new.url')порушує цикл

Підсумок: використовуйте лише 301, якщо ви абсолютно впевнені, що більше ніколи не будете використовувати цю URL-адресу. Зазвичай ніколи в кореневому режимі (example.com/)


7

Основна проблема із браузером 301 - це кеш-пам'ять перенаправлення, навіть якщо ви відключили перенаправлення з серверного рівня.

Завжди краще використовувати 302, якщо ви дозволяєте перенаправляти коротке вікно технічного обслуговування.


Це точно не "питання"; це просто, як це призначено для роботи. Перенаправлення HTTP на HTTPS, перенаправлення покинутого веб-сайту на новий тощо, - це деякі звичні звички 301.
HosseyNJF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.