반응 앱 오류 : 'WebSocket'을 구성하지 못했습니다 : HTTPS를 통해로드 된 페이지에서 안전하지 않은 WebSocket 연결을 시작할 수 없습니다


25

React 앱을 배포하고 있지만 https를 통해 페이지를 방문하면 이상한 오류가 발생합니다.

https를 통해 페이지를 방문하면 다음 오류가 발생합니다.

SecurityError : 'WebSocket'을 구성하지 못했습니다 : HTTPS를 통해로드 된 페이지에서 안전하지 않은 WebSocket 연결을 시작할 수 없습니다.

그러나 http를 통해 페이지로 이동하면 완벽하게 작동합니다.

문제는 내가 말할 수있는 한 웹 소켓을 사용하지 않는다는 것입니다. 코드를 검색하여 wss : 대신 https 또는 ws : http에 대한 요청이 있는지 확인했지만 아무것도 보이지 않습니다.

누구든지 전에이 문제를 겪었습니까?

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

답변:


38

패치에 대한 반응 스크립트를 기다리는 사람들의 경우 :

https를 통한 로컬 테스트의 경우 수동으로 편집 할 수 있습니다.

node_modules/react-dev-utils/webpackHotDevClient.js

해당 파일의 62 행에 원하는 코드는 다음과 같습니다.

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

배포하려면 다음 단계를 따르십시오.

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

npm run build

그런 다음 package.json에서 serve와 함께 작동하는 배포 스크립트를 추가하십시오.

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

그리고

npm deploy or yarn deploy

이 답변이 오류를 제거하는 데 도움이되기를 바랍니다.

자세한 내용은 여기를 참조 하십시오 `


나는 같은 문제가 있으므로 노드 모듈 내 에서이 파일을 편집해야합니까?
Versifiction

1
@Versifiction 예. 이 작업은 새로운 반응 스트립 패치가 출시 될 때까지 수행해야합니다.
Pratap Sharma

아마도 수정해서는 안 node_modules이이 공유의 repo하기 위해 최선을 다하고되지 않으므로 수동
oliversisson

그래서 나는 같은 문제를 겪고 있으며 앱을 heroku에 배포하고 있습니다. 심지어 웹 소켓 파일을 강제로 커밋하고 heroku에 배포했지만 여전히 같은 오류가 발생합니다. 내가 시도하지 않은 유일한 것은 전체 node_modules 디렉토리를 커밋하는 것입니다.
타일러 Strouth

@TylerStrouth Heroku에서 노드 모듈을 편집 할 수있는 가능성이 있습니까? heroku에 배포하면 package.json에 언급 된 패키지가 설치됩니다. 이렇게하면 위 파일에서 변경 한 내용도 무시됩니다. heroku의 노드 모듈 내에서 파일을 편집하십시오.
Pratap Sharma

12

여기에 많은 답변이 실제로 문제를 해결하지만이 질문을 한 이후 내가 찾은 가장 간단한 방법은 npm 패키지 서비스 를 종속성 에 추가 하는 것입니다.

yarn add serve 또는 npm i serve

시작 스크립트를 다음으로 바꿉니다.

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

이것은 실제로 create-react-app 문서에서 나온 것입니다.


2
이 답변으로 받아 들여 져야합니다
Dinesh Shekhawat

1
서버를 로컬로 시작할 때 404 오류가 발생합니다.
휴고

응답이 늦어서 죄송합니다. 로컬 개발을위한 다른 스크립트를 만들어야합니다. 예를 들어. "dev": "react scripts start" 당신은 실행됩니다 npm run dev로컬로 실행합니다.
Leo Policastro

6

더 간단한 해결책이 있습니다. 당신의 다운 그레이드 react-scripts에를 3.2.0당신의 package.json(광산에 있었다 3.3.0).

package-lock.jsonnode_modules( rm -rf package-lock.json node_modules) 을 삭제 한 다음을 수행해야 할 수도 npm i있습니다. 새로운 리포지토리 package.json와 리포지토리를 모두 커밋하십시오 package-lock.json.


나를 위해 일했다. npm 설치가 완료된 후 제안 된 감사 수정을 본능적으로 실행했기 때문에 처음에는 3.3.0으로 되돌아갔습니다.
MarsAndBack

4

반응으로 엉망 react-scripts이 된 지 오래되었지만, 실수하지 않으면 webpack 위에 구축되므로 webpack-dev-server를 사용하여 개발 속도를 높일 수 있습니다. 디스크에서 변경 사항을 발견 할 때 핫 재로드를 트리거하기 위해 클라이언트와 통신하기 위해 웹 소켓을 사용합니다.

아마도 개발 모드에서 응용 프로그램을 시작했을 것이므로 프로덕션 환경에 배포하는 경우 npm run build즐겨 사용하는 웹 서버와 함께 제공 할 수있는 일련의 자바 스크립트 파일을 생성 해야합니다 .


잘 들립니다, 감사합니다! 나는 그것을 시도하고 그것이 작동하는지 알려줍니다.
Leo Policastro

나는 정확히 같은 문제가 있는데 GitHub 페이지에 배포하기 위해 npm run build를 실행했지만 작동하지 않았으므로 Heroku를 시도했는데 위에서 언급 한 오류가 발생합니다. 안전하지 않은로드 옵션을 만들면 HTTP에서 작동합니다 스크립트. 보안을 유지 하고이 오류를 해결하는 솔루션이 도움이 될 것입니다!
코끼리

@Ganesha, 당신은 잘못하고 있습니다. 디렉토리 npm run build의 내용 만 업로드하고 업로드 해야합니다 build.
Jimmy Stenke

6
반응 스크립트 3.3.0 버전의 문제입니다. 자세한 내용은 " github.com/facebook/create-react-app/pull/8079 " 에서 찾을 수 있습니다 . 스크립트에 대한 반응을 다운 그레이드했습니다. 3.2.0. 지금 오류가 없습니다.
Ganesha

1
@ 몬스터 피스, 이상하다. Heroku에서 테스트하지 않았지만 로컬에서 테스트했지만 테스트 결과는 아닙니다. env가 문제 일 수 있으므로 명시 적으로 언급하는 것이 가장 좋습니다. NODE_ENV=production npm run build그런 다음 build디렉토리 만 heroku에 업로드하십시오 (즉, ssr을 사용하지 않는 한 서버에서 노드가 필요하지 않음). 프로덕션 빌드 에는 webpack dev 서버가 포함 되어서는 안됩니다 .이 경우 버그라고 말하고 싶습니다.
Jimmy Stenke

3
  • 폴더 및 node.js 앱의 뒷면에 작성
  • 앱 루트에 빠른 라우터 만들기
  • server.js 파일 만들기

이 코드를 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}...`)
})

pakage.json에

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

그리고 /folder-name-react-app/pakage.json에 경로 프록시를 추가하십시오.

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

1

heroku 배포 에서이 문제로 어려움을 겪고있는 사람은 reac-scripts모듈을로 다운 그레이드합니다 3.2.0.

  1. package-lock.json파일 제거
  2. node_modules폴더 제거
  3. react-scripts버전을 바꾸다3.2.0
  4. npm install 모든 모듈을 다시

0

Create-React-App 웹 사이트에서이 기사를 봐야합니다. Heroku 앱을 만들 때 필요한 Github에서 React 앱의 특정 빌드 팩 인 mars / create-react-app-buildpack을 가리키는 'Create-React-App'으로 만든 React 앱을 올바르게 배포하는 방법에 대해 설명합니다.

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

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

모두가 여기에있는 안전하지 않은 웹 소켓 문제와 동일한 문제가 있었으므로 Create-React-App 기사에서 솔루션을 테스트했습니다. 문제를 해결했습니다. node_module 등을 수정할 필요가 없습니다.

React 앱의 루트에서 CLI에서 heroku 앱을 만들 때이 명령 만 있으면됩니다.

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

그때:

git push heroku master

Heroku 웹 사이트를 방문 할 때 "안전하지 않은 웹 소켓"오류없이 예상대로 실행됩니다.

(Heroku에 이미 생성 / 배포 한 후에 mars / create-react-app 빌드 팩을 추가하는 방법을 모르겠습니다. 아직 그 부분에 도달하지 못했습니다.)

위의 솔루션은 create-react-app 팀이 Heroku에 배포 해야하는 문제를 해결하는 것으로 보입니다.


Heroku에 배포 된 후에 빌드 팩을 추가하려면 Heroku 앱 페이지-> '설정'탭-> '빌드 팩'섹션으로 이동하십시오. mers / create-react-app를 추가 한 다음 'Add Buildpack'버튼을 클릭하십시오.
John Towery
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.