Проксирование веб-сокета с помощью activ-скриптов не работает - PullRequest
0 голосов
/ 08 января 2020

У меня есть веб-приложение реагирования, и я использую реагирующие сценарии для разработки. Я использую прокси для передачи запросов и веб-сокетов бэкенду.

Мой пакет. json:

{
  "name": "webapp",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    // ...
    "react-scripts": "^3.3.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    // ...
  },
  "devDependencies": {
    // ...
  },
  "homepage": "/home"
}

У меня есть setupProxy. js:

const proxy = require("http-proxy-middleware")

module.exports = app => {
  app.use(proxy('/api', {
    target: 'http://127.0.0.1:9140',
    ws: true
  }));

  app.disable('etag');
}

Прокси работает отлично для http запроса. Веб-приложение реагирует на запрос http://localhost:3000/api/foo/bar, а запрос проксируется на http://localhost:9140/api/foo/bar.

Моя проблема связана с веб-сокетами. Реагирующее веб-приложение открывает веб-сокет в ws://localhost:3000/api/foo/bar, серверная часть получает запрос веб-сокета, обновляет его и отвечает кодом http 101. Но веб-приложение реагирует так и не получает этот ответ. Веб-приложение реагирует на ответ с кодом http 400. Итак, веб-сокет закрыт.

Я пытаюсь выяснить, почему приложение реагирует на ошибку 400. Я пробовал много конфигураций прокси (я пробовал конфигурацию прокси в файле package.json, я пробовал некоторые другие возможные конфигурации, основанные на странице http-proxy-middleware github).

Я обнаружил некоторые проблемы с http-proxy-middleware и react-scripts:

После некоторого расследования кажется, что проблема связана с sockjs-node, используемым Webpack. Похоже, sockjs-node перехватить запрос и заменить ответ моего бэкенда на ответ с ошибкой 400.

Кто-нибудь знает, как сделать так, чтобы веб-сокеты работали с прокси-сервером в приложении реагирования в процессе разработки?

1 Ответ

0 голосов
/ 08 января 2020

В прокси-сокете web-сокета create-реагировать-приложение v3.3.0 сломано . Попробуйте понизиться до v3.2.0. Я все еще на бета-версии v3.3.0, так как я зависим от объединения nulli sh, но я бы вообще не рекомендовал использовать бета-версию.

...