Коды и ошибки 301, 302, 303, 304
- Категория: Что делать (ошибки и проблемы)
- – Автор: Игорь (Администратор)
Сайты дело такое. В них постоянно что-то корректируется, так сказать живёт и движется. Поэтому нет ничего удивительно в том, что периодически можно столкнуться с кодами и ошибками 301, 302, 303, 304. О том, что эти коды значат и ещё о паре нюансов, и пойдет речь в данном обзоре.
Что значат коды и ошибки 301, 302, 303, 304?
HTTP 301 Moved Permanently (Навсегда перемещен) - этот код означает, что исходный запрошенный браузером документ (веб-страница) полноценно перенесён в другой документ, URL адрес которого указан в HTTP заголовке Location.
Если говорить простыми словами, то суть в следующем. В сайте была страница "page1". Владелец сайта перенёс её в страницу "page2". Пользователь открывает браузер и пытается открыть страницу "page1". Сайт возвращает браузеру код 301 и указывает страницу "page2" в заголовке "Location". Браузер перенаправляет пользователя на страницу "page2". Кстати, само действие, когда пользователя перекидывает с одной страницы в другую, называется редиректом (более подробно смотрите ссылки в конце обзора).
HTTP 302 Moved Temporarily, Found (Временно перемещен) - этот код означает, что исходный запрошенный браузером документ (веб-страница) временно перемещен в другой документ, URL адрес которого указан в HTTP заголовке Location.
Сам механизм крайне схож с предыдущим, но существует одна большая разница. Код и ошибка 302 означает, что страница Временно перенесена. Иными словами, что пользователю не стоит учитывать текущий адрес.
HTTP 303 See Other (Просмотр других ресурсов) - этот код означает, что исходный документ (веб-страница) временно находятся по другому адресу, но обращаться к которому можно только с методом GET.
Небольшая справка: GET - просто запросить страницу. POST - при запросе страницы также отправляются какие-то данные пользователя. Простой пример GET - это вы просто ввели в браузере URL страницы (данные никакие не отправляются). Простой пример POST - это вы открыли страницу, ввели какие-то данные в какую-нибудь формочку и нажали кнопку "Отправить".
Механизм схож с 302, но существует один важный момент, что указанную страницу в Location можно открыть только методом GET. Делается это для того, чтобы данные пользователя точно не отправлялись.
Чтобы лучше понять смысл, рассмотрим ситуацию. Допустим, вы открываете страницу поиска в сайте. Вводите какой-то текст и нажимаете кнопку "Искать". Браузер отправляет POST запрос с текстом поиска. Сервер находит нужную страницу и отправляет клиенту код 303 с URL адресом этой страницы. В таком случае браузер будет открывать эту страницу GET запросом (т.е. текст поиска не будет передаваться, как это было бы при POST запросе).
Кстати, в противовес 303 так же существует код HTTP 307 Temporary Redirect (Временный редирект), который подразумевает передачу как GET, так и POST запроса. По сути, 303 и 307 это конкретизация действий с GET и POST, а смысл у них как у 302.
HTTP 304 Not Modified (Не модифицировано) - этот код передаётся в том случае, когда браузер пользователя при открытии документа (страницы) использовал HTTP заголовок If-Modified-Since (там ещё If-None-Match может быть), в котором указывается дата последней загрузки документа, и документ (веб-страница) не был изменен с указанного времени.
А теперь простыми словами о механизме. Когда пользователь в первый раз открывает страницу, то её содержимое браузер видит впервые, поэтому будет загружать страницу целиком (вместе с картинками, CSS, JS и т.п.). При этом браузер сохранит у себя в кэше эту страницу и её ресурсы (картинки, CSS, JS и т.п.).
Когда же браузер будет открывать страницу второй раз, то логично было бы уточнить у сервера, а нужно ли скачивать эти данные ещё раз или можно использовать те, что браузер уже сохранил у себя в кэше. В частности, CSS и JS обычно редко меняются. Поэтому при вторичном запросе документа (и его отдельных ресурсов) браузер добавляет заголовок If-Modified-Since с датой первой загрузки (и при необходимости If-None-Match). И если документ (или его отдельные ресурсы) не были изменены, то браузер получит код 304 и не будет ничего скачивать.
Подобный подход позволяет экономить трафик и быстрее загружать веб-страницы. В частности, у большинства сайтов существуют ресурсы (CSS, JS и т.п.), которые много весят, но которые практически никогда не меняются (порой даже со времён создания сайта). Соответственно, какой смысл каждый раз их таскать через интернет? В этом случае и применяется 304.
Примечание: Никогда не обращали внимание, что когда в первый раз открываешь сайт, то он грузится чуть медленнее, чем потом, когда открываешь другие его страницы? Это как раз эффект от использования 304.
Про важность редиректов в СЕО (SEO) и коды 301, 302, 303, 307?
Важно понимать, что от того, как вы применяете редиректы с помощью кодов 301, 302, 303 и 307, напрямую зависит качество сео-продвижения вашего сайта. Но сначала пару важных деталей и моментов.
Как поисковики воспринимают код и ошибку 301? Логика элементарна. Если страница полностью перемещена, то значит исходную страницу нужно убрать из поиска и добавить ту, которая указана в Location.
Как поисковики воспринимают код и ошибку 302, 303, 307? Ничего сверхнеожиданного. Если страница временно перемещена, то значит исходную страницу нужно оставить, а ту, которая указана в Location, не учитывать.
А теперь то, почему это важно. Абстрактный пример для понимания. Скажем, существует страница "page1", которая была перенесена в "page2", но вместо 301-го редиректа использовался 302-й. Вы изменили Description (см. обзор мета теги) в странице "page2". Что делать поисковику? 302-й код означает, что это временный перенос. Поэтому с большой вероятностью метаописание поисковик будет брать то, которое было у "page1", а не то, которое у "page2". А вот если использовать 301-й редирект, то поисковик будет брать то описание, которое у "page2".
Отдельно добавлю про 304 и СЕО. Стоит понимать, что поисковые боты также учитывают этот код. Суть в том, что для каждого сайта выделяется некий лимит обхода (абстрактно, 1000 страниц в месяц). А в сайте может быть много веб-страниц (скажем, 10 тысяч, 20 тысяч, 100 тысяч и т.д.). Поэтому если какие-то страницы вообще не меняются или остаются неизменными в течение длительного времени, то использование 304-го кода позволит высвободить часть лимита для обхода других страниц. Это, соответственно, увеличивает скорость индексации и плюс поисковые боты меньше нагружают сайт.
Также советую ознакомиться с обзорами Редирект (redirect) что это и зачем он нужен? и ещё PHP редирект - перенаправление на другую страницу, так как в них больше деталей и практики.
Понравилась заметка? Тогда время подписываться в социальных сетях и делать репосты!
☕ Понравился обзор? Поделитесь с друзьями!
Комментарии / отзывы