เกิดข้อผิดพลาดของแอป: ล้มเหลวในการสร้าง 'WebSocket': การเชื่อมต่อ WebSocket ที่ไม่ปลอดภัยอาจไม่ได้เริ่มจากหน้าเว็บที่โหลดผ่าน HTTPS


25

ฉันกำลังปรับใช้แอป React แต่ได้รับข้อผิดพลาดแปลก ๆ เมื่อฉันเข้าชมหน้านี้ผ่าน https

เมื่อฉันไปที่หน้ามากกว่า https ฉันได้รับข้อผิดพลาดต่อไปนี้:

SecurityError: ล้มเหลวในการสร้าง 'WebSocket': การเชื่อมต่อ WebSocket ที่ไม่ปลอดภัยอาจไม่เริ่มต้นจากหน้าเว็บที่โหลดผ่าน HTTPS

แต่เมื่อฉันไปที่หน้าผ่าน http มันทำงานได้อย่างสมบูรณ์

ปัญหาคือฉันไม่ได้ใช้ websockets เท่าที่ฉันจะบอกได้ ฉันค้นหารหัสเพื่อดูว่ามีคำขอ 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"
    ]
  }
}

คำตอบ:


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 ของคุณเพิ่มสคริปต์การปรับใช้เพื่อทำงานกับบริการ:

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

และจากนั้น

npm deploy or yarn deploy

หวังว่าคำตอบนี้จะช่วยคุณกำจัดข้อผิดพลาด

สำหรับข้อมูลเพิ่มเติมดูที่นี่ `


ฉันมีปัญหาเดียวกันดังนั้นฉันต้องแก้ไขไฟล์นี้ภายในโมดูลโหนด?
Versifiction

1
@ รุ่นที่ใช่ สิ่งนี้จะต้องทำจนกว่าจะมีการปล่อยแพตช์ปฏิกิริยาตอบสนองใหม่
Pratap Sharma

อาจไม่ควรแก้ไขnode_modulesด้วยตนเองเนื่องจากสิ่งเหล่านี้จะไม่ถูกส่งไปยัง repo ที่แชร์
oliversisson

ดังนั้นฉันมีปัญหาเดียวกันและฉันกำลังปรับใช้แอพของฉันกับ heroku ฉันได้คอมมิชชันไฟล์ websocket และนำไปใช้กับ heroku แต่ฉันยังได้รับข้อผิดพลาดเดียวกันทุกคนมีงานทำกับเรื่องนี้? สิ่งเดียวที่ฉันไม่ได้ลองก็คือการยอมรับทั้งไดเร็กทอรี node_modules
Tyler Strouth

@TylerStrouth มีความเป็นไปได้ไหมที่คุณสามารถแก้ไขโมดูลโหนดใน Heroku ได้ ?? เมื่อคุณปรับใช้กับ heroku แล้วให้ติดตั้งแพ็คเกจที่กล่าวถึงใน package.json วิธีนี้การเปลี่ยนแปลงที่คุณทำในไฟล์ด้านบนจะได้รับการแทนที่ด้วย ลองแก้ไขไฟล์ภายในโมดูลโหนดใน heroku
Pratap Sharma

12

คำตอบมากมายที่นี่แก้ปัญหาได้จริง แต่วิธีที่ง่ายที่สุดที่ฉันพบตั้งแต่ฉันถามคำถามนี้คือการเพิ่มแพ็กเกจ npm ให้บริการสำหรับการอ้างอิงของคุณ

yarn add serve หรือ npm i serve

จากนั้นแทนที่สคริปต์เริ่มต้นของคุณด้วยสิ่งต่อไปนี้:

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

นี้เป็นจริงตรงออกมาจากสร้างปฏิกิริยาแอปเอกสาร


2
นี่ควรเป็นคำตอบที่ยอมรับ
Dinesh Shekhawat

1
สิ่งนี้ใช้ไม่ได้สำหรับฉันฉันได้รับข้อผิดพลาด 404 เมื่อฉันเปิดเซิร์ฟเวอร์ในพื้นที่
Hugo

ขออภัยในการตอบกลับล่าช้าคุณจะต้องสร้างสคริปต์อื่นเพื่อการพัฒนาท้องถิ่น ตัวอย่างเช่น. "dev": "react scripts start" คุณจะเรียกใช้npm run devเพื่อทำงานในเครื่อง
Leo Policastro

6

นี่เป็นวิธีที่ง่ายกว่า ปรับลดของคุณ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เพื่อซื้อคืน


ทำงานให้ฉัน ตอนแรกมันกลับไปเป็น 3.3.0 เพราะฉันใช้สัญชาตญาณการแก้ไขการตรวจสอบที่แนะนำหลังจากการติดตั้ง npm เสร็จสิ้น
MarsAndBack

4

เป็นเวลานานแล้วที่ฉันยุ่งกับปฏิกิริยา แต่react-scriptsถูกสร้างขึ้นบน webpack ถ้าฉันไม่เข้าใจผิดดังนั้นจึงมักใช้ webpack-dev-server เพื่อเร่งการพัฒนา มันใช้ websockets เพื่อสื่อสารกับลูกค้าเพื่อทริกเกอร์โหลดร้อนเมื่อพบการเปลี่ยนแปลงบนดิสก์

คุณอาจเพิ่งเริ่มต้นแอปพลิเคชันในโหมดการพัฒนาดังนั้นหากคุณปรับใช้กับสภาพแวดล้อมการผลิตคุณควรเรียกใช้npm run buildซึ่งจะสร้างชุดของไฟล์จาวาสคริปต์ที่คุณสามารถให้บริการกับเว็บเซิร์ฟเวอร์ที่คุณชื่นชอบ


ฟังดูแล้วขอบคุณ! ฉันจะลองและแจ้งให้คุณทราบว่ามันทำงาน
Leo Policastro

ฉันประสบปัญหาเดียวกันฉันได้ใช้งาน npm run build สำหรับการปรับใช้กับหน้า GitHub แต่มันไม่ทำงานดังนั้นลอง 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 (กล่าวคือ build จะเป็น webroot ของคุณบนเว็บเซิร์ฟเวอร์โดยไม่จำเป็นต้องมีโหนดบนเซิร์ฟเวอร์เว้นแต่ใช้ 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-scripts3.2.0

  1. ลบpackage-lock.jsonไฟล์
  2. ลบnode_modulesโฟลเดอร์
  3. แทนที่react-scriptsรุ่นเป็น3.2.0
  4. npm install โมดูลทั้งหมดอีกครั้ง

0

คุณต้องอ่านบทความนี้จากเว็บไซต์ Create-React-App มันอธิบายวิธีการปรับใช้แอป React ที่สร้างด้วย 'Create-React-App' อย่างถูกต้องซึ่งชี้ไปที่ buildpack เฉพาะสำหรับแอป React mars / create-react-app-buildpack ที่ Github ที่คุณต้องการเมื่อสร้างแอป Heroku

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

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

ฉันมีปัญหาเดียวกันกับปัญหา websocket ที่ไม่ปลอดภัยที่ทุกคนกำลังมีที่นี่ดังนั้นฉันทดสอบวิธีการแก้ปัญหาจากบทความ Create-React-App มันแก้ปัญหาได้ ไม่จำเป็นต้องแก้ไข node_module หรืออะไรก็ตาม

สิ่งที่คุณต้องทำคือใช้คำสั่งนี้เมื่อสร้างแอป heroku จาก CLI ที่รูทของแอป React:

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

แล้ว:

git push heroku master

เมื่อคุณไปที่เว็บไซต์ของคุณที่ Heroku มันจะทำงานตามที่คาดไว้โดยไม่มีข้อผิดพลาด "ไม่ปลอดภัย websocket"

(ฉันไม่ทราบวิธีการเพิ่ม mars / create-react-app buildpack หลังจากที่คุณสร้าง / ปรับใช้กับ Heroku แล้วฉันยังไม่ได้ไปยังส่วนนั้น)

วิธีการแก้ปัญหาข้างต้นดูเหมือนว่าจะแก้ไขปัญหาที่ทีมงานสร้างแอปปฏิกิริยาตอบสนองสำหรับการปรับใช้กับ Heroku


หากต้องการเพิ่ม buildpack หลังจากที่มันถูกนำไปใช้กับ Heroku ให้ไปที่หน้าแอป Heroku-> แท็บ 'การตั้งค่า' -> 'Buildpacks' คุณเพิ่ม mers / create-react-app จากนั้นคลิกปุ่ม 'เพิ่ม Buildpack'
John Towery
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.