React app error: 'WebSocket' oluşturulamadı: HTTPS üzerinden yüklenen bir sayfadan güvenli olmayan bir WebSocket bağlantısı başlatılamayabilir


25

Bir React uygulaması dağıtıyorum ama sayfayı https üzerinden ziyaret ettiğimde garip bir hata alıyorum.

Sayfayı https üzerinden ziyaret ettiğimde aşağıdaki hatayı alıyorum:

SecurityError: 'WebSocket' oluşturulamadı: HTTPS üzerinden yüklenen bir sayfadan güvenli olmayan bir WebSocket bağlantısı başlatılamayabilir.

Ama http üzerinden sayfaya gittiğimde mükemmel çalışıyor.

Sorun, anlayabildiğim kadarıyla websockets kullanmıyorum. Ben https veya ws: wss yerine http gerekir bir istek olup olmadığını görmek için kod üzerinden arama: ama hiçbir şey görmüyorum.

Daha önce birisi bunun üzerinde çalıştı mı?

Package.json dosyasının bir kopyasını ekliyorum. Hata ayıklamaya yardımcı olmak için kodun başka bir bölümünü yüklememe ihtiyacınız varsa bana bildirin.

Şimdiden teşekkürler.

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

Yanıtlar:


38

Bir yama için tepki komut dosyaları bekleyen kişiler için:

Https üzerinden yerel test için manuel olarak düzenleyebilirsiniz

node_modules/react-dev-utils/webpackHotDevClient.js

İşte bu dosyanın 62. satırında isteyeceğiniz kod:

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

Dağıtım için aşağıdaki adımları izleyin:

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

npm run build

Ve sonra package.json ile serve ile çalışmak için bir dağıtım betiği ekleyin:

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

Ve sonra

npm deploy or yarn deploy

Umarım bu cevap hatadan kurtulmanıza yardımcı olur.

Daha fazla bilgi için buraya bakın`


Ben de aynı sorunu var, bu yüzden sadece düğüm modülleri içinde bu dosyayı düzenlemek zorunda?
Versiyon

1
@Versifiction evet. Bu, yeni bir reaksiyon damlası yaması çıkana kadar yapılmalıdır.
Pratap Sharma

node_modulesbunlar paylaşılan repo için taahhüt edilmeyeceği için muhtemelen manuel olarak değiştirilmemelidir
oliversisson

Aynı sorunu yaşıyorum ve uygulamamı heroku'ya dağıtıyorum. Hatta sadece websocket dosyasını zorla işledim ve heroku'ya konuşlandırdım, ancak yine de aynı hatayı alıyorum, herkesin bu konuda bir işi var mı? Denemediğim tek şey tüm node_modules dizinini işlemek.
Tyler Strouth

@TylerStrouth Düğüm modüllerini Heroku'da düzenleyebileceğiniz bir olasılık var mı ?? Heroku'ya konuşlandırıldıktan sonra package.json içinde belirtilen paketleri kurar. Bu şekilde, yukarıdaki dosyada yaptığınız değişiklikler de geçersiz kılınır. Heroku'daki düğüm modülleri içindeki dosyayı düzenlemeyi deneyin.
Pratap Sharma

12

Burada birçok cevap gerçekten sorunu çözmek ama bu soruyu sordum beri bulduğum en basit yolu bağımlılıklarınıza npm paketi hizmet eklemektir .

yarn add serve veya npm i serve

ve başlangıç ​​komut dosyanızı aşağıdakilerle değiştirin:

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

Bu aslında, oluştur-tepki-uygulama belgelerinin dışında


2
bu kabul edilmiş cevap olmalıydı
Dinesh Shekhawat

1
Bu benim için çalışmıyor Sunucumu yerel olarak başlattığımda bir 404 hatası alıyorum
Hugo

Geç yanıt için özür dileriz, yerel gelişim için başka bir komut dosyası oluşturmanız gerekir. Örneğin. Yerel olarak "dev": "react scripts start" çalıştırmak npm run deviçin çalıştırın.
Leo Policastro

6

İşte daha basit bir çözüm. Senin Düşürme react-scriptsTo 3.2.0Gözlerinde farklı package.json(mayın idi3.3.0 ).

package-lock.jsonVe node_modules( rm -rf package-lock.json node_modules) öğelerinizi silmeniz ve ardından bir npm i. Hem yeni hem de Teslim package.jsonve package-lock.jsonrepoya.


Benim için çalıştı. Başlangıçta 3.3.0'a geri dönmeye devam etti, çünkü npm yüklemesi bittikten sonra içgüdüsel olarak önerilen denetim düzeltmesini çalıştırıyordum.
MarsAndBack

4

Tepki ile uğraştığımdan beri bir süre geçti, ama react-scriptsTepki ile uğraştığımdan yanılmıyorsam web paketinin üzerine inşa edildi, bu yüzden gelişimi hızlandırmak için büyük olasılıkla webpack-dev-server kullanıyor. Diskteki değişiklikleri keşfettiğinde sıcak yeniden yüklemeyi tetiklemek üzere istemciyle iletişim kurmak için websockets kullanır.

Muhtemelen uygulamayı geliştirme modunda başlatıyorsunuz, bu yüzden bir üretim ortamına dağıtıyorsanız npm run build, en sevdiğiniz web sunucunuzla sunabileceğiniz bir dizi javascript dosyası oluşturacak şekilde çalıştırmalısınız .


Kulağa doğru geliyor, teşekkürler! Bunu deneyeceğim ve işe yarayıp yaramadığını size bildireceğim.
Leo Policastro

Tam olarak aynı sorunu yaşıyorum, GitHub sayfalarına dağıtmak için npm çalışma derlemesi çalıştırdım ama işe yaramadı, bu yüzden Heroku'yu denedim, yukarıda belirtilen hatayı aldım, güvensiz yüklemek için bir seçenek yaparsam HTTP üzerinde çalışır Kodlar. Güvenli hale getirme ve bu hatanın çözülmesini sağlama çözümü yardımcı olacaktır!
Ganesha

@Ganesha, o zaman yanlış yapıyorsun. Yapmanız npm run buildve yalnızca builddizindeki içeriği yüklemeniz gerekir .
Jimmy Stenke

6
Reaksiyon komut dosyaları 3.3.0 sürümü ile ilgili bir sorun var. Ayrıntılı belgeleri burada bulabilirsiniz " github.com/facebook/create-react-app/pull/8079 ". Scriptlere tepki verdim - 3.2.0 ve şimdi hiçbir hata
Ganesha

1
@ canavar, garip. Heroku üzerinde test etmeme rağmen yerel olarak test ettiğimde bu sonuç değildi. Env bir sorun olabilir, bu yüzden açıkça belirtmek her zaman en iyisidir. NODE_ENV=production npm run buildve daha sonra yalnızca builddizini heroku'ya yükleyin (yani derleme, web sunucusunda web kökünüz olacaktır, ssr kullanmadıkça sunucuda düğüme gerek yoktur). Üretim inşa edilmelidir değil ben o durumda bir hata olduğunu söyleyebilirim, webpack dev sunucusu bile dahil var.
Jimmy Stenke

3
  • Klasörün ve node.js uygulamasının arkasında oluşturun
  • Uygulamanızın kökünde hızlı yönlendirici oluşturun
  • Bir server.js dosyası oluşturun

Bu kodu server.js içine ekleyin

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 içine

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

Ve rota proxy'sini /folder-name-react-app/pakage.json dosyasına ekleyin

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

1

Heroku konuşlandırmasıyla ilgili bu sorunla mücadele eden herkes reac-scriptsmodülün sürümüne geçiyor3.2.0 .

  1. package-lock.jsondosyayı kaldır
  2. node_modulesklasörü kaldır
  3. yerine react-scriptsgöre versiyonunu3.2.0
  4. npm install tüm modüller tekrar

0

Bu makaleye Create-React-App web sitesinden bakmanız gerekiyor. Heroku uygulaması oluştururken ihtiyaç duyduğunuz Github'da React uygulaması, mars / create-tepki-uygulama-buildpack için belirli bir buildpack'i işaret eden 'Create-React-App' ile oluşturulan React uygulamasının düzgün bir şekilde nasıl dağıtılacağını açıklar.

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

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

Herkesin burada güvensiz websocket sorunu ile aynı sorunu vardı, bu yüzden Create-React-App makaleden çözümü test ettim. Sorunu çözdü. Düğüm_modülünü veya herhangi bir şeyi değiştirmeye gerek yoktur.

Tek yapmanız gereken React uygulamasının kökündeki CLI'dan heroku uygulaması oluştururken bize bu komutu vermek:

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

sonra:

git push heroku master

Heroku web sitenize gittiğinizde. "güvensiz websocket" hatası olmadan beklendiği gibi çalışacaktır.

(Heroku için zaten oluşturduktan / dağıttıktan SONRA mars / create-tepki-uygulama buildpack'i nasıl ekleyeceğimi bilmiyorum. Bu bölüme henüz ulaşmadım.)

Yukarıdaki çözüm, create-tepki-uygulama ekibinin Heroku'ya konuşlandırmak için sahip olduğu sorunu ele alıyor gibi görünüyor.


Heroku'ya dağıtıldıktan SONRA buildpack eklemek için Heroku uygulama sayfası-> 'Ayar' sekmesi -> 'Buildpacks' bölümüne gidin. Mers / create-reakt-app ekledikten sonra 'Buildpack Ekle' düğmesine tıklayın.
John Towery
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.