Ответ
Редирект (перенаправление) в 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 канонические урлы делать. Короче, вещь нужная, просто запомни, какой код для чего, а то будет тебе хиросима, а не перенаправление.