Lỗi ứng dụng phản ứng: Không thể tạo 'WebSocket': Kết nối WebSocket không an toàn có thể không được bắt đầu từ một trang được tải qua HTTPS


25

Tôi đang triển khai ứng dụng React nhưng gặp một lỗi lạ khi tôi truy cập trang qua https.

Khi tôi truy cập trang qua https, tôi nhận được lỗi sau:

SecurityError: Không thể tạo 'WebSocket': Kết nối WebSocket không an toàn có thể không được bắt đầu từ một trang được tải qua HTTPS.

Nhưng khi tôi vào trang qua http thì nó hoạt động hoàn hảo.

Vấn đề là tôi không sử dụng websockets như tôi có thể nói. Tôi đã tìm kiếm thông qua mã để xem liệu có yêu cầu http nào phải là https hoặc tới ws: thay vì wss: nhưng tôi không thấy gì cả.

Có ai đã chạy vào đây trước?

Tôi đang bao gồm một bản sao của tệp pack.json. Hãy cho tôi biết nếu bạn cần tôi tải lên bất kỳ phần mã nào khác để giúp gỡ lỗi.

Cảm ơn trước.

{
  "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"
    ]
  }
}

Câu trả lời:


38

Đối với những người đang chờ phản ứng kịch bản cho một bản vá:

Để kiểm tra cục bộ qua https , bạn có thể chỉnh sửa thủ công

node_modules/react-dev-utils/webpackHotDevClient.js

Đây là mã bạn muốn ở dòng 62 của tệp đó:

protocol: window.location.protocol === 'https:' ? 'wss' : 'ws',

Để triển khai, hãy làm theo các bước dưới đây:

npm install -g serve // This can be done locally too

npm run build

Và sau đó trong gói.json của bạn thêm một tập lệnh triển khai để làm việc với phục vụ:

"scripts": {
    "deploy": "serve -s build",
}

Và sau đó

npm deploy or yarn deploy

Hy vọng câu trả lời này sẽ giúp bạn thoát khỏi lỗi.

Để biết thêm thông tin tham khảo tại đây `


Tôi có cùng một vấn đề, vì vậy tôi chỉ cần chỉnh sửa tập tin này trong các mô-đun nút?
Phiên bản

1
@Versifiction có. Điều này phải được thực hiện cho đến khi một bản vá phản ứng kịch bản mới được phát hành.
Pratap Sharma

có lẽ không nên sửa đổi node_modulesthủ công vì những điều này sẽ không được cam kết với repo được chia sẻ
oliversisson

Vì vậy, tôi đang có cùng một vấn đề và tôi đang triển khai ứng dụng của mình lên heroku. Tôi thậm chí đã cam kết mạnh mẽ chỉ tập tin websocket và triển khai nó cho heroku nhưng tôi vẫn nhận được cùng một lỗi, có ai có cách khắc phục điều này không? Điều duy nhất tôi chưa thử là cam kết toàn bộ thư mục node_modules.
Tyler Strouth

@TylerStrouth Có khả năng bạn có thể chỉnh sửa các mô-đun nút trong Heroku không ?? Khi bạn đã triển khai lên heroku, nó sẽ cài đặt các gói được đề cập trong pack.json. Bằng cách này, những thay đổi bạn đã thực hiện trong tệp trên cũng được ghi đè. Hãy thử chỉnh sửa tệp bên trong các mô-đun nút trong heroku.
Pratap Sharma

12

Rất nhiều câu trả lời ở đây thực sự giải quyết được vấn đề nhưng cách đơn giản nhất tôi đã tìm thấy kể từ khi tôi hỏi câu hỏi này là thêm gói npm phục vụ cho các phụ thuộc của bạn.

yarn add serve hoặc là npm i serve

và sau đó thay thế tập lệnh bắt đầu của bạn bằng cách sau:

"scripts": {
    "start": "serve -s build",
}

Điều này thực sự nằm ngoài tài liệu ứng dụng tạo phản ứng


2
đây phải là câu trả lời được chấp nhận
Dinesh Shekhawat

1
Điều này không hiệu quả với tôi Tôi gặp lỗi 404 khi khởi chạy máy chủ của mình cục bộ
Hugo

Xin lỗi vì phản hồi muộn, bạn sẽ cần tạo một tập lệnh khác để phát triển cục bộ. Ví dụ. "dev": "react scripts start" Các bạn sẽ chạy npm run devđể chạy cục bộ.
Leo Policastro

6

Đây là một giải pháp đơn giản hơn. Hạ cấp của bạn react-scriptsxuống 3.2.0trong package.json(của tôi là tại 3.3.0).

Bạn có thể cần xóa package-lock.jsonnode_modules( rm -rf package-lock.json node_modules), sau đó thực hiện a npm i. Cam kết cả mới package.jsonpackage-lock.jsonrepo của bạn.


Đã làm cho tôi. Ban đầu, nó tiếp tục trở lại 3.3.0 vì theo bản năng tôi đang chạy bản sửa lỗi kiểm toán được đề xuất sau khi cài đặt xong npm.
MarsAndBack

4

Đã được một thời gian kể từ khi tôi gặp rắc rối với phản ứng, nhưng react-scriptsđược xây dựng trên đầu gói web nếu tôi không nhầm, vì vậy rất có thể nó sử dụng máy chủ webpack-dev-server để tăng tốc độ phát triển. Nó sử dụng các websockets để liên lạc với khách hàng để kích hoạt tải lại nóng khi phát hiện ra những thay đổi trên đĩa.

Có lẽ bạn chỉ mới khởi động ứng dụng ở chế độ phát triển, vì vậy nếu bạn triển khai nó vào môi trường sản xuất, bạn nên chạy npm run buildđể tạo một tập hợp các tệp javascript mà bạn có thể phục vụ với máy chủ web yêu thích của mình.


Nghe có vẻ đúng, cảm ơn bạn! Tôi sẽ thử điều đó và cho bạn biết nếu nó hoạt động.
Leo Policastro

Tôi đang gặp vấn đề chính xác như vậy, tôi đã chạy npm run build để triển khai nó lên các trang GitHub nhưng nó không hoạt động, vì vậy đã thử Heroku Tôi gặp lỗi được đề cập ở trên, nó hoạt động trên HTTP nếu tôi thực hiện tùy chọn tải không an toàn kịch bản. Giải pháp để làm cho nó an toàn và làm cho lỗi này được giải quyết sẽ hữu ích!
Ganesha

@Ganesha, sau đó bạn đang làm sai. Bạn cần phải làm một npm run buildvà chỉ tải lên các nội dung trong buildthư mục.
Jimmy Stenke

6
Đó là một vấn đề với phiên bản phản ứng kịch bản 3.3.0. Bạn có thể tìm thấy tài liệu chi tiết tại đây " github.com/facebook/create-react-app/pull/8079 ". Tôi đã hạ cấp phản ứng với các tập lệnh - 3.2.0 và hiện tại tôi không nhận được lỗi nào
Ganesha

1
@monsterunch, lạ. Đó không phải là kết quả khi tôi thử nghiệm mặc dù tôi đã không thử nghiệm trên heroku, nhưng tại địa phương. Có thể là env là một vấn đề nên có lẽ tốt nhất là luôn đề cập đến nó một cách rõ ràng. NODE_ENV=production npm run buildvà sau đó chỉ tải lên buildthư mục lên heroku (nghĩa là bản dựng sẽ là webroot của bạn trên máy chủ web, không cần nút trên máy chủ trừ khi sử dụng ssr). Bản dựng sản xuất không nên bao gồm máy chủ phát triển webpack, tôi sẽ nói đó là một lỗi trong trường hợp đó.
Jimmy Stenke

3
  • Tạo ở mặt sau của thư mục và ứng dụng node.js
  • Tạo bộ định tuyến tốc hành trong thư mục gốc của ứng dụng của bạn
  • Tạo một tệp server.js

Thêm mã này vào server.js

const express = require('express')
const path = require('path')
const app = express()

if (process.env.NODE_ENV === 'production') {
  // Serve any static files
  app.use(express.static(path.join(__dirname, 'client/build')))
  // Handle React routing, return all requests to React app
  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 listening on port ${port}...`)
})

Vào pakage.json

,
  "scripts": {
    "start": "node server.js",
    "heroku-postbuild": "cd client && yarn && yarn run build"
  }

Và thêm proxy tuyến đường vào /folder-name-react-app/pakage.json

  "proxy": "http://localhost:8080"

1

bất cứ ai đang vật lộn với vấn đề này khi triển khai heroku đều hạ cấp reac-scriptsmô-đun của bạn xuống 3.2.0.

  1. xóa package-lock.jsontập tin
  2. xóa node_modulesthư mục
  3. thay thế react-scriptsphiên bản thành3.2.0
  4. npm install tất cả các mô-đun một lần nữa

0

Bạn cần xem bài viết này từ trang web Tạo ứng dụng. Nó giải thích cách triển khai ứng dụng React được tạo bằng 'Tạo-React-App' đúng cách chỉ đến gói xây dựng cụ thể cho ứng dụng React, mars / created-Reac-app-buildpack, tại Github mà bạn cần khi tạo ứng dụng Heroku.

https://create-react-app.dev/docs/deployment/#heroku

https://github.com/mars/create-react-app-buildpack

Tôi gặp vấn đề tương tự với sự cố websocket không an toàn mà mọi người đang gặp phải ở đây, vì vậy tôi đã thử nghiệm giải pháp từ bài viết Tạo-Phản ứng-Ứng dụng. Nó giải quyết vấn đề. Không cần phải sửa đổi node_module hoặc bất cứ điều gì.

Tất cả những gì bạn cần làm là cho chúng tôi lệnh này khi tạo ứng dụng heroku từ CLI ở thư mục gốc của ứng dụng React:

heroku create --buildpack mars/create-react-app

sau đó:

git push heroku master

khi bạn vào trang web của bạn tại Heroku. nó sẽ chạy như mong đợi mà không có bất kỳ lỗi "websocket không an toàn" nào.

(Tôi không biết cách thêm gói / ứng dụng tạo ứng dụng vào ứng dụng SAU KHI bạn đã tạo / triển khai cho Heroku. Tôi chưa có phần đó.)

Giải pháp trên dường như đang giải quyết vấn đề mà nhóm ứng dụng tạo phản ứng đã triển khai cho Heroku.


để thêm buildpack SAU KHI đã được triển khai vào Heroku, hãy truy cập trang ứng dụng Heroku-> tab 'Cài đặt' -> 'Buildpacks'. Bạn thêm mers / create-Reac-app, sau đó nhấp vào nút 'Thêm Buildpack'.
John Towery
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.