waves_logo Docs
  • Руководство владельца ноды
    Руководство владельца ноды
  • Установить ноду Waves
    • Развернуть ноду в Docker
      Развернуть ноду в Docker
    • Установить ноду на Ubuntu
      Установить ноду на Ubuntu
    • Установить ноду на macOS
      Установить ноду на macOS
    • Установить ноду на Windows
      Установить ноду на Windows
    • Установить из исходников (сборка SBT)
      Установить из исходников (сборка SBT)
    Установить ноду Waves
  • Синхронизировать блокчейн Waves
    • Импортировать и экспортировать блокчейн
      Импортировать и экспортировать блокчейн
    • Загрузить актуальный блокчейн
      Загрузить актуальный блокчейн
    • Откатить ноду
      Откатить ноду
    Синхронизировать блокчейн Waves
  • Генерировать блоки
    Генерировать блоки
  • Обновить ноду
    Обновить ноду
  • Конфигурация ноды
    Конфигурация ноды
  • Логирование
    Логирование
  • Кошелек ноды
    Кошелек ноды
  • Фичи
    • Протокол активации
      Протокол активации
    Фичи
  • Собственный блокчейн
    Собственный блокчейн
  • REST API ноды
    • API-ключ
      API-ключ
    • Работа с транзакциями
      Работа с транзакциями
    • Формат числовых полей
      Формат числовых полей
    • Постраничная выборка
      Постраничная выборка
    • CORS
      CORS
    • Ограничения пула публичных нод
      Ограничения пула публичных нод
    • Медленные запросы
      Медленные запросы
    • Коды ответов и ошибки
      Коды ответов и ошибки
    REST API ноды
  • Расширения
    • gRPC Server
      gRPC Server
    • Blockchain Updates
      Blockchain Updates
    Расширения
  • Устранение неполадок
    • Генерация блока FAQ
      Генерация блока FAQ
    Устранение неполадок
  • Нода на языке Go
    Нода на языке Go
      • English
      • Русский
      On this page
      waves_logo Docs

          # CORS: поддержка кросс-доменных запросов

          CORS (Cross-origin resource sharing) — это технология, которая позволяет выполнять кросс-доменные запросы, то есть веб-приложению из одного домена обращаться к HTTP-ресурсам другого домена. По умолчанию браузеры в целях безопасности ограничивают кросс-доменные запросы, поэтому веб-приложения могут запрашивать ресурсы только с того домена, с которого были загружены.

          Начиная с версии ноды 1.4.7, нода по умолчанию передает в HTTP-заголовке Access-control-allow-origin домен, указанный в запросе в заголовке Origin. Таким образом, веб-приложениям с любых доменов разрешено делать запросы к REST API вашей ноды.

          Если требуется, вы можете изменить настройки CORS. Для этого в файле конфигурации ноды укажите HTTP-заголовки, которые нода будет добавлять в ответ REST API:

          • access-control-allow-headers
          • access-control-allow-origin
          • access-control-allow-methods
          • access-control-allow-credentials

          Пример настроек:

          waves {
            rest-api {
              cors-headers {
                access-control-allow-headers = ["Authorization", "Content-Type", "X-Requested-With", "Timestamp", "Signature", "X-API-Key", "api_key"]
                access-control-allow-origin = "http://example.org"
                access-control-allow-methods = ["OPTIONS", "POST", "GET", "DELETE"]
                access-control-allow-credentials = true
              }
              ...
            }
            ...
          }
          

          Настройки для более ранних версий

          Выполните следующие действия:

          1. Отключите CORS в настройках ноды.
          2. Настройте веб-сервер.
          3. Включите CORS и отправку авторизационных данных в запросе к REST API.

          1. Отключите CORS в настройках ноды

          В файле конфигурации ноды укажите waves.rest-api.cors = no.

          2. Настройте веб-сервер

          Добавьте веб-сервер — например, nginx — который будет работать между веб-сайтом и нодой и добавлять в ответ REST API ноды следующие HTTP заголовки:

          Access-control-allow-credentials: true
          Access-control-allow-headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,signature,timestamp
          Access-control-allow-methods: GET, POST, OPTIONS, PUT, DELETE
          Access-control-allow-origin: https://example.com
          Access-control-expose-headers: Content-Length,Content-Range
          

          Обратите внимание: в заголовке Access-control-allow-origin должен быть указан конкретный домен (не *). Если вы хотите, чтобы любые веб-сайты могли использовать REST API вашей ноды, настройте веб-сервер таким образом, чтобы он передавал в этом заголовке домен, указанный в запросе в заголовке Origin.

          Пример настройки nginx:

          server {
              listen 80;
              server_name "";
           
              access_log /var/log/nginx/access.log;
              error_log /var/log/nginx/error.log error;
          ...
              location / {
                  proxy_pass http://wavesrpc ;
              ...
                  if ($request_method = 'OPTIONS') {
                    return 204;
                  }
          
                  set $ref "*";
                  if ($http_referer ~* ^(http?\:\/\/)(.*?)\/(.*)$) {
                    set $ref $1$2;
                  }
                  add_header 'Access-Control-Allow-Origin' $ref always;
                  add_header 'Access-Control-Allow-Credentials' 'true' always;
                  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
                  add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,signature,timestamp' always;
                  add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
              }
          ...
          }
          

          3. Включите CORS и отправку авторизационных данных в запросе к REST API

          Пример:

          const response = await fetch(url, {
              mode: 'cors',
              credentials: 'include',
              ...
              body: JSON.stringify(data)
          });
          
          Постраничная выборка
          Ограничения пула публичных нод
          Постраничная выборка
          Ограничения пула публичных нод