Можно ли передать данные с помощью GET-запроса?

«Можно ли передать данные с помощью GET-запроса?» — вопрос из категории Сети, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, GET-запросы в HTTP используются для передачи данных через query-параметры в URL. Параметры добавляются после знака ? в формате ключ=значение, а пары разделяются символом &.

Пример на Node.js с Express:

// Серверная часть (Express.js)
const express = require('express');
const app = express();

app.get('/api/data', (req, res) => {
  // Данные доступны в req.query
  const { userId, filter } = req.query;
  console.log(`Запрос данных для пользователя: ${userId}, фильтр: ${filter}`);
  // ... логика выборки данных ...
  res.json({ success: true, query: req.query });
});

app.listen(3000);

Клиентский запрос (используя node-fetch или браузер):

// URL будет: http://localhost:3000/api/data?userId=123&filter=active
fetch('http://localhost:3000/api/data?userId=123&filter=active')
  .then(response => response.json())
  .then(data => console.log(data));

Важные ограничения и соображения:

  • Длина URL: Ограничена (обычно ~2048 символов, зависит от сервера и клиента).
  • Видимость: Данные открыто видны в адресной строке, истории браузера и логах сервера. Не подходит для паролей, токенов или любой конфиденциальной информации.
  • Кэширование: GET-запросы могут кэшироваться браузерами и промежуточными прокси.
  • Семантика: Согласно стандартам HTTP, GET предназначен для получения (fetching) данных, а не для операций с побочными эффектами (изменение состояния на сервере).

Для передачи больших объемов данных или конфиденциальной информации используйте POST, PUT или PATCH, передавая данные в теле запроса (body).