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