Yerel IP'yi (Google Colab'da olduğu için gerçekten öyle değil) halka açık bir IP'ye tünellemek için ngrok kullandım.
Ngrok konsoluna giderken, oluşturulan tüm tünelleri görebiliyorum. Localhost için sadece bir tünel oluşturdum: port ama burada 2 tane var, biri HTTP için diğeri HTTPS için (o kadar hoş değil mi?).
Web Uygulamamın https adresine gidersem, konsolda görüyorum
Ancak http adresine gidersem, konsolda
S: Tünellerden uzaktaki bir makineye HTTP'ye ihtiyaç duyan hizmet çalışanları ile çalışabilir misiniz?
A: Görünüşe göre evet!
Bu kaydın arkasındaki kod (nerede başarısız olduğunu bilmek önemlidir):
IndexController.prototype._registerServiceWorker = function() {
console.log("1.Starting SW function.");
if (!navigator.serviceWorker) {
console.log("2.Browser is NOT compatible with SW or something is not working.");
return; }
console.log("2.Browser is compatible with SW.");
navigator.serviceWorker.register('/sw.js').then(function() {
console.log('3.Registration worked!');
}).catch(function() {
console.log('3.Registration failed!');
});
};
Daha karmaşık hale getirmek için Service Workers kullanan web uygulamam Colab içinde çalışıyor ( Google Colab ) . Web Uygulaması, Colab içindeki Node.js üzerinde çalışıyor.
Localhost'tan çalışıyorsanız, sizin için daha kolay olacaktır, çünkü localhost'a bağlanırken https gereksinimi uygulanmaz (teoriye göre). [A] ve [B]
Bu, tarayıcının Uygulamanızda iyi olmasının aynısı değildir, çünkü localhost üzerinde çalışır.
Not: Yukarıdaki deneyim ..
- Firefox: aşağıdaki ayarlarla ve bunlar olmadan çalıştı.
- Chrome: URL'leri beyaz listeye eklemeden ve yeniden başlatmadan
Sahip olduğum https web uygulamasına gidiyorum:
IndexController.js:49 Mixed Content: The page at 'https://0a4e1e0095b0.ngrok.io/' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://0a4e1e0095b0.ngrok.io/updates?since=1602934673264&'. This request has been blocked; this endpoint must be available over WSS.
IndexController._openSocket @ IndexController.js:49
IndexController @ IndexController.js:10
(anonymous) @ index.js:16
loadScripts @ loadScripts.js:5
46.../utils/loadScripts @ index.js:15
s @ _prelude.js:1
e @ _prelude.js:1
(anonymous) @ _prelude.js:1
IndexController.js:49 Uncaught DOMException: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
at IndexController._openSocket (https:
Sahip olduğum http web uygulamasına gidiyorum:
Navigated to http:
IndexController.js:17 1.Starting SW function.
IndexController.js:19 2.Browser is NOT compatible with SW or something is not working.
Localhost'ta değilseniz VE https kullanamıyorsanız, tarayıcınızda bu ayarları değiştirmeniz gerekebilir.
Bazıları bunu zaten açıkladı ama işte yine başlıyor.
Krom:
- Chrome: // flags / # unsafely-Treat-insecure-origin-as-safe adresine gidin
- Beyaz listeye eklemek istediğiniz url'leri ekleyin.
- Chrome'u yeniden başlatın
Bunun tüm Chrome pencerelerini yeniden başlatacağını unutmayın . Bu benim için bir çözüm değil çünkü tünellerim her oluşturulduğunda adını değiştiriyor ve her seferinde bir grup pencereyi yeniden başlatamıyorum.
Firefox / Waterfox
- Geliştirici Araçlarını Aç
- Ayarları aç
- "Hizmet çalışanlarını HTTP üzerinden etkinleştir (araç kutusu açıkken)" seçeneğini işaretleyin
Firefox / Waterfox
Muhtemelen aşağıdaki değişiklikleri yapmanız gerekmiyor, ama yaptım (tarayıcım biraz eski olabilir). Daha fazla bilgi burada .
Hakkında: config
Etkinleştirdim
dom.serviceWorkers.testing.enabled
dom.serviceWorkers.enabled
Bu https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers ve aynı sitedeki ilgili sayfalara bakmanızı şiddetle tavsiye ederim .
Birisi ngrok kurulumuyla ilgileniyorsa, bu çok basittir (python sürümü).
# Install pyngrok python package on your Google Colab Session
!pip install pyngrok
# Set up your ngrok Authtoken (requires free registration)
!ngrok authtoken YOUR_TOKEN_HERE
# Invoke ngrok from Python and start tunneling/connecting
from pyngrok import ngrok
# Open a HTTP tunnel on the default port 80 if not specified
ngrok_tunnel = ngrok.connect('8888')
# You can print it, or go to the ngrok console on https:
print (ngrok_tunnel.public_url)