Что такое редирект (redirect) в HTTP?

«Что такое редирект (redirect) в HTTP?» — вопрос из категории Сети, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Редирект (перенаправление) в HTTP — это механизм, при котором сервер указывает клиенту (например, браузеру или Node.js HTTP-клиенту) автоматически перейти на другой URL вместо запрошенного. Это реализуется через статус-коды 3xx.

Основные типы редиректов:

  • 301 Moved Permanently — постоянное перенаправление. Браузеры и поисковые системы кэшируют его и в будущем автоматически обращаются к новому URL.
  • 302 Found (или 307 Temporary Redirect) — временное перенаправление. Клиент должен использовать исходный метод запроса (для 307) или GET (для 302) при переходе.
  • 308 Permanent Redirect — аналогичен 301, но гарантирует сохранение исходного метода запроса (например, POST).

Пример реализации редиректа в Node.js с использованием встроенного модуля http:

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.url === '/old-page') {
    // Постоянный редирект на новый URL
    res.writeHead(301, { 
      'Location': 'https://example.com/new-page',
      'Content-Type': 'text/plain'
    });
    res.end('Moved Permanently to /new-page');
  } else {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello from main page');
  }
});

server.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Практическое применение в Node.js-фреймворках: В Express редирект реализуется одной строкой:

app.get('/legacy', (req, res) => {
  // Временный редирект (302)
  res.redirect('/new-endpoint');
  // Или постоянный редирект
  // res.redirect(301, '/new-endpoint');
});

Редиректы критически важны для поддержки обратной совместимости при рефакторинге API, переносе сайтов и реализации канонических URL для SEO.