Какие знаешь способы обхода CORS со стороны frontend

«Какие знаешь способы обхода CORS со стороны frontend» — вопрос из категории Безопасность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Проксирование запросов
    Настроить прокси-сервер (например, через Nginx или Node.js), который будет перенаправлять запросы к API.
    // Пример настройки прокси в vite.config.js
    server: {
      proxy: {
        '/api': {
          target: 'https://api.example.com',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^/api/, '')
        }
      }
    }
  1. JSONP (устаревший, но работает для GET)
    Использует тег <script> для обхода CORS, но только для GET-запросов.
    function handleResponse(data) {
      console.log(data);
    }
    const script = document.createElement('script');
    script.src = 'https://api.example.com/data?callback=handleResponse';
    document.body.appendChild(script);
  1. CORS Anywhere (для разработки)
    Публичные прокси (например, https://cors-anywhere.herokuapp.com/), но не для продакшена.
    fetch('https://cors-anywhere.herokuapp.com/https://api.example.com')
      .then(response => response.json())
  1. Настройка заголовков на сервере
    Если API под твоим контролем, добавь заголовки:
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Methods: GET, POST, PUT

Важно: Лучший способ — договориться с бэкендом о правильной настройке CORS. Остальные методы — временные или для разработки.