0

Ошибка React-приложения: Не удалось создать 'WebSocket': Нельзя инициировать небезопасное соединение WebSocket со страницы, загруженной через HTTPS

150

Описание проблемы:

Я развертываю приложение на React, но при попытке зайти на страницу через HTTPS получаю странную ошибку.

Когда я захожу на страницу по протоколу HTTPS, возникает следующая ошибка:

SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.

Однако при заходе на ту же страницу через HTTP всё работает прекрасно.

Проблема в том, что, насколько я могу судить, я не использую WebSocket. Я проверил код на наличие запросов к HTTP, которые должны быть к HTTPS, или к ws:, вместо wss:, но ничего не нашел.

Кто-либо сталкивался с этой проблемой ранее?

Я прикладываю копию файла package.json. Дайте знать, если нужно загрузить другие части кода для помощи в отладке.

Заранее спасибо!

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "baffle": "^0.3.6",
    "cross-env": "^6.0.3",
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-player": "^1.14.2",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.3.0",
    "react-typist": "^2.0.5",
    "webpack-hot-dev-clients": "^2.0.2"
  },
  "scripts": {
    "start": "cross-env react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

5 ответ(ов)

0

Для обеспечения транспортной безопасности, как вы могли бы запросить страницу с использованием https://, замените ws:// на wss://.

Это указывает на то, что вы хотите установить безопасное соединение WebSocket.

0

Вот более простое решение. Понизьте версию react-scripts до 3.2.0 в вашем package.json (у меня была версия 3.3.0).

Вам может понадобиться удалить файл package-lock.json и папку node_modules (rm -rf package-lock.json node_modules), затем выполните команду npm i. Зафиксируйте изменения в вашем package.json и package-lock.json в репозитории.

0

Вам не будет трудно вспомнить, что react-scripts основан на webpack, и, если я не ошибаюсь, использует webpack-dev-server для ускорения разработки. Он применяет веб-сокеты для связи с клиентом, чтобы инициировать горячую перезагрузку при обнаружении изменений в файлах на диске.

Скорее всего, вы просто запускаете приложение в режиме разработки. Если вы собираетесь развернуть его в производственной среде, вам следует выполнить команду npm run build, которая создаст набор JavaScript файлов, которые вы сможете обслуживать с помощью вашего любимого веб-сервера.

0

Чтобы создать базовую структуру для вашего приложения на Node.js с использованием Express, выполните следующие шаги:

  1. Создайте папку в корне вашего проекта для вашего приложения Node.js.
  2. В этой папке создайте файл server.js, который будет служить основным серверным файлом вашего приложения.
  3. Затем добавьте следующий код в server.js:
const express = require('express')
const path = require('path')
const app = express()

if (process.env.NODE_ENV === 'production') {
  // Обслуживаем статические файлы
  app.use(express.static(path.join(__dirname, 'client/build')))
  
  // Обрабатываем маршруты React, возвращая все запросы в React-приложение
  app.get('*', (request, response) => {
    response.sendFile(path.join(__dirname, 'client/build', 'index.html'))
  })
}

const port = process.env.PORT || 8080
app.listen(port, () => {
  console.log(`API слушает на порту ${port}...`)
})
  1. В вашем package.json добавьте следующее в раздел "scripts":
"scripts": {
  "start": "node server.js",
  "heroku-postbuild": "cd client && yarn && yarn run build"
}
  1. Также добавьте прокси-маршрут в ваш package.json в папке вашего React-приложения (по пути /folder-name-react-app/package.json):
"proxy": "http://localhost:8080"

Следуя этим шагам, вы сможете настроить серверное приложение, которое будет обслуживать ваши статические файлы для React в production-среде. Не забудьте, что в режиме разработки для запуска приложения может потребоваться дополнительная настройка.

0

Если вы сталкиваетесь с проблемой развертывания на Heroku, рекомендую понизить версию модуля react-scripts до 3.2.0. Для этого выполните следующие шаги:

  1. Удалите файл package-lock.json.
  2. Удалите папку node_modules.
  3. Измените версию react-scripts на 3.2.0 в вашем package.json.
  4. Запустите команду npm install, чтобы установить все модули заново.

Это должно помочь решить вашу проблему с развертыванием.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь