JavaScript · API · Начальный
Редиректы
Разберитесь с HTTP-редиректами и управляйте тем, как fetch их обрабатывает.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Работа с редиректами на практике
#Справочник редиректов
#Упражнения:
Следовать за редиректом
#Получите `/api/redirect/`. Выведите `response.url` (финальный URL после редиректа) и `response.status`.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// fetch /api/redirect/ и вывести финальный URL и статус
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const response = await fetch(`${BASE_URL}/api/redirect/`);
console.log(response.url);
console.log(response.status);
}
main();
Определить, был ли редирект
#Получите `/api/redirect/` и сравните исходный URL с `response.url`. Выведите `true`, если редирект произошёл, `false` в противном случае.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const url = `${BASE_URL}/api/redirect/`;
// fetch и сравнить url с response.url
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const url = `${BASE_URL}/api/redirect/`;
const response = await fetch(url);
console.log(response.url !== url);
}
main();
Сравнить временный и постоянный редирект
#Получите `/api/redirect/` и `/api/redirect/permanent/`. Для каждого выведите финальный `response.url` и `response.status`.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// fetch оба эндпоинта и вывести финальный url + status для каждого
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const r1 = await fetch(`${BASE_URL}/api/redirect/`);
console.log('Temporary:', r1.url, r1.status);
const r2 = await fetch(`${BASE_URL}/api/redirect/permanent/`);
console.log('Permanent:', r2.url, r2.status);
}
main();
Остановиться на редиректе в ручном режиме
#Получите `/api/redirect/` с `redirect: "manual"`. Выведите `response.type` и `response.status`. Затем получите тот же URL со стандартным `redirect: "follow"` и сравните.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// ручной редирект
// автоматический редирект
// сравнить
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const manual = await fetch(`${BASE_URL}/api/redirect/`, { redirect: 'manual' });
console.log('Manual — type:', manual.type, 'status:', manual.status);
const follow = await fetch(`${BASE_URL}/api/redirect/`, { redirect: 'follow' });
console.log('Follow — url:', follow.url, 'status:', follow.status);
}
main();
Получить данные через редирект
#Получите `/api/redirect/` и разберите JSON-тело из финального ответа. Выведите `data.count`, чтобы подтвердить, что вы получили список товаров.
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
// fetch через редирект и прочитать тело ответа
}
main();
Решение
const BASE_URL = 'https://apilearn.tukas.dev';
async function main() {
const response = await fetch(`${BASE_URL}/api/redirect/`);
const data = await response.json();
console.log(data.count);
}
main();