← Назад к вопросам

Что используется для отправки запросов кроме fetch?

2.0 Middle🔥 122 комментариев
#Браузер и сетевые технологии

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы отправки запросов кроме Fetch API

Помимо современного Fetch API, в JavaScript существует несколько других методов для отправки HTTP-запросов, каждый со своей историей, особенностями и областями применения. Эти методы уходят корнями в разные эпохи развития веб-технологий и до сих пор используются в legacy-коде или специфических сценариях.

XMLHttpRequest (XHR)

Это классический объект, который был основным способом выполнения AJAX-запросов до появления Fetch API. Несмотря на более громоздкий API, XHR до сих пор поддерживается во всех браузерах и используется в старых проектах.

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data');

xhr.onload = function() {
    if (xhr.status === 200) {
        console.log('Успех:', xhr.responseText);
    } else {
        console.error('Ошибка:', xhr.status);
    }
};

xhr.onerror = function() {
    console.error('Ошибка сети');
};

xhr.send();

Ключевые особенности XHR:

  • Событийная модель — обработка через callback-функции (onload, onerror, onprogress)
  • Поддержка прогресса — возможность отслеживать загрузку файлов через onprogress
  • Более широкое наследование — поддержка старых браузеров, включая IE
  • Сложный API — требует больше кода для базовых операций

Библиотеки HTTP-клиентов

В реальных проектах часто используются сторонние библиотеки, предоставляющие более удобный интерфейс:

  1. Axios — самая популярная библиотека для HTTP-запросов

    axios.get('https://api.example.com/data')
      .then(response => console.log(response.data))
      .catch(error => console.error(error));
    
  2. jQuery.ajax() — часть библиотеки jQuery, до сих пор используется в legacy-проектах

    $.ajax({
      url: 'https://api.example.com/data',
      method: 'GET',
      success: function(data) {
        console.log(data);
      },
      error: function(error) {
        console.error(error);
      }
    });
    
  3. Superagent — легковесная библиотека с цепочечным API

  4. Request (устарел) — ранее популярная библиотека для Node.js

WebSocket

Для двусторонней связи в реальном времени используется протокол WebSocket, который принципиально отличается от HTTP:

const socket = new WebSocket('wss://api.example.com/socket');

socket.onopen = function() {
    socket.send('Привет, сервер!');
};

socket.onmessage = function(event) {
    console.log('Сообщение от сервера:', event.data);
};

socket.onerror = function(error) {
    console.error('Ошибка WebSocket:', error);
};

Server-Sent Events (SSE)

Технология для получения потоковых данных от сервера в реальном времени:

const eventSource = new EventSource('https://api.example.com/stream');

eventSource.onmessage = function(event) {
    console.log('Новое событие:', event.data);
};

eventSource.onerror = function() {
    console.error('Ошибка SSE соединения');
};

GraphQL-клиенты

Для работы с GraphQL API используются специализированные клиенты:

  • Apollo Client — полнофункциональный клиент с кэшированием
  • Relay — клиент от Facebook, оптимизированный для React
  • urql — минималистичный клиент

Нативные методы

В специфических средах доступны свои API:

  • Node.js: встроенные модули http и https

    const https = require('https');
    https.get('https://api.example.com/data', (res) => {
      let data = '';
      res.on('data', chunk => data += chunk);
      res.on('end', () => console.log(data));
    });
    
  • React Native: fetch и дополнительные модули для специфических нужд

  • Electron: может использовать как Fetch API, так и Node.js-модули

Сравнение и выбор технологии

При выборе метода отправки запросов стоит учитывать:

  • Совместимость с браузерами — Fetch API не поддерживается в IE, что может требовать полифилов или использования XHR
  • Функциональность — поддержка отмены запросов, таймауты, перехватчики (interceptors)
  • Удобство использования — синтаксис async/await, обработка ошибок
  • Размер бандла — сторонние библиотеки увеличивают размер приложения
  • Специфические требования — загрузка файлов с прогрессом, стриминг, WebSocket
  • Кэширование и состояние — некоторые библиотеки (как Apollo Client) предоставляют продвинутое управление состоянием

В современных проектах Fetch API стал стандартом де-факто благодаря нативности и Promise-based API. Однако Axios остается популярным выбором благодаря удобным интерцепторам, автоматической трансформации JSON и лучшей обработке ошибок. XMLHttpRequest используется в legacy-коде или когда требуется тонкий контроль над загрузкой файлов.

Для новых проектов я рекомендую использовать Fetch API с обертками для обработки ошибок или Axios для более сложных сценариев. WebSocket и SSE выбираются для real-time функциональности, а GraphQL-клиенты — при работе с соответствующей спецификацией API.