ฉันใช้ ngrok เพื่ออุโมงค์ IP ในเครื่อง (ไม่ใช่อย่างนั้นจริง ๆ เพราะอยู่ใน Google Colab) เป็นสาธารณะ
ไปที่คอนโซล ngrokฉันเห็นอุโมงค์ทั้งหมดที่สร้างขึ้น ฉันสร้างอุโมงค์เดียวสำหรับ localhost: พอร์ต แต่ที่นี่มี 2 ช่องสำหรับ HTTP และอื่น ๆ สำหรับ HTTPS (ไม่ดีเหรอ?)
ถ้าฉันไปที่ที่อยู่ https ของ Web App บนคอนโซลฉันจะเห็น
แต่ถ้าฉันไปที่ที่อยู่ http บนคอนโซลฉันจะได้รับ
ถาม:คุณสามารถทำงานกับพนักงานบริการที่ต้องการ HTTP ผ่านอุโมงค์ไปยังเครื่องระยะไกลได้หรือไม่
A:เห็นได้ชัดว่าใช่!
รหัสที่อยู่เบื้องหลังการลงทะเบียนนั้นคือ (สิ่งสำคัญที่ต้องรู้ว่าล้มเหลวตรงไหน)
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!');
});
};
และเพื่อให้ซับซ้อนยิ่งขึ้นเว็บแอปของฉันที่ใช้ Service Workers กำลังทำงานใน Colab ( Google Colab ) เว็บแอปทำงานบน Node.js ภายใน Colab
หากคุณกำลังทำงานจาก localhost มันน่าจะง่ายกว่าสำหรับคุณเนื่องจากข้อกำหนด https ไม่ได้บังคับใช้เมื่อเชื่อมต่อกับ localhost (ตามทฤษฎี) [A] และ[B]
ไม่เหมือนกันที่เบราว์เซอร์จะเข้ากันได้ดีกับแอพของคุณเพียงเพราะมันทำงานบน localhost
หมายเหตุ:การทดลองของฉันด้านบน ..
- Firefox: ใช้งานได้กับและไม่มีการตั้งค่าด้านล่าง
- Chrome: โดยไม่ต้องเพิ่ม URL ในรายการที่อนุญาตพิเศษและเริ่มต้นใหม่ฉันได้รับ
ไปที่แอปเว็บ https ฉันได้รับ:
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:
ไปที่เว็บแอป http ฉันได้รับ:
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 และไม่สามารถใช้ https ได้คุณอาจต้องเปลี่ยนการตั้งค่าเหล่านี้ในเบราว์เซอร์ของคุณ
บางคนอธิบายเรื่องนี้ไปแล้ว แต่นี่จะกลับมาอีกครั้ง
โครเมียม:
- ไปที่ chrome: // flags / # unsafely-treat-insecure-origin-as-secure
- เพิ่ม URL ที่คุณต้องการอนุญาตพิเศษ
- รีสตาร์ท Chrome
โปรดทราบว่าการดำเนินการนี้จะรีสตาร์ทหน้าต่าง Chrome ทั้งหมด นี่ไม่ใช่วิธีแก้ปัญหาสำหรับฉันเพราะอุโมงค์ของฉันเปลี่ยนชื่อทุกครั้งที่สร้างและฉันไม่สามารถรีสตาร์ทหน้าต่างจำนวนมากได้ทุกครั้ง
Firefox / Waterfox
- เปิดเครื่องมือสำหรับนักพัฒนา
- เปิดการตั้งค่า
- ทำเครื่องหมาย "เปิดใช้งานพนักงานบริการผ่าน HTTP (เมื่อเปิดกล่องเครื่องมือ)"
Firefox / Waterfox
คุณอาจไม่จำเป็นต้องทำการเปลี่ยนแปลงด้านล่าง แต่ฉันทำไปแล้ว (เบราว์เซอร์ของฉันอาจเก่าไปหน่อย) ข้อมูลเพิ่มเติมที่นี่
ใน about: config
ฉันเปิดใช้งาน
dom.serviceWorkers.testing.enabled
dom.serviceWorkers.enabled
ขอแนะนำเป็นอย่างยิ่งให้ดูที่https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workersและหน้าที่เกี่ยวข้องในไซต์เดียวกัน
หากมีคนสนใจการตั้งค่า ngrok มันง่ายมาก (เวอร์ชั่น python)
# 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)