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

Ответ

Редирект (перенаправление) в 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.

Ответ 18+ 🔞

Слушай, ну вот объясняю как для себя, чтоб понятно было. Редирект в HTTP — это такая штука, когда сервер тебе говорит: «Э, дружок, не туда полез, иди-ка на другой адрес, там что надо». По-простому — перенаправление. Работает через статус-коды 3xx, и тут, бля, важно не перепутать, а то наебнёшься.

Основные типы, на которые надо смотреть:

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

Вот смотри, как это в голом Node.js выглядит, без всяких фреймворков:

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.url === '/old-page') {
    // Отправляем нахуй на новый адрес насовсем
    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');
});

Видишь? Если запросили /old-page — получай 301 и иди, блядь, туда, куда сказали. Всё просто, как три копейки.

А в Express это вообще ебушки-воробушки, одна строка:

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

Вот и вся магия. Штука архиважная: когда апишки рефакторишь или сайт переезжает — без редиректов будет пиздец и битые ссылки. Поисковики тоже это любят, для SEO канонические урлы делать. Короче, вещь нужная, просто запомни, какой код для чего, а то будет тебе хиросима, а не перенаправление.