类似sizzy.co的站点访问localhost及外部网站嵌入本地站点的技术问询
嘿,这个问题问得挺实在的,我来给你掰扯清楚这几个点:
一、Sizzy.co这类工具是怎么访问你本地localhost的?
其实核心是本地代理桥接的思路:
- 当你打开Sizzy的网页端时,它会引导你安装一个轻量的本地客户端(或者浏览器扩展),这个程序会在你的本地机器上运行,相当于一个“中间人”。
- 这个本地客户端会和Sizzy的云端服务器建立一条安全的加密连接,然后把你本地
localhost的指定端口(比如3000)的流量,通过这条连接转发到Sizzy的云端。 - 最后,你在Sizzy网页端看到的“预览”,其实是云端服务把本地流量回传给网页端,绕过了浏览器的同源策略和网络防火墙的限制——毕竟直接从外部网页访问你本地的
localhost是浏览器安全机制不允许的。
二、外部网站怎么访问你本地运行的服务器?
要让外部能访问本地服务,本质是把本地服务暴露到公网,常用的方法有三种:
- 路由器端口映射:
如果你有自己的公网IP,可以登录路由器后台,找到“端口转发”/“虚拟服务器”设置,把本地服务器的端口(比如8080)映射到公网IP的对应端口。别人就能通过你的公网IP:端口访问。缺点是公网IP可能是动态的,需要搭配DDNS(动态域名解析)绑定固定域名。 - 临时反向代理工具:
比如ngrok、localtunnel这类工具,适合临时测试。以ngrok为例,安装后运行命令:
它会给你分配一个临时公网域名(比如ngrok http 8080https://xyz.ngrok.io),外部访问这个域名就会转发到你本地的localhost:8080。 - 内网穿透服务:
如果是长期使用,可以用花生壳、FRP这类工具,绑定自己的域名,稳定把本地服务转发到公网,适合开发调试或者小型服务对外暴露。
三、把本地站点嵌入外部网站的基础示例
注意:直接在外部网站嵌入localhost是行不通的(浏览器安全限制),得先把本地服务暴露到公网,再嵌入。下面是完整步骤:
1. 先搭一个简单的本地服务器
用Node.js的Express写个极简服务(你也可以用其他语言/框架):
// server.js const express = require('express'); const app = express(); // 允许跨域,避免iframe嵌入被拦截 app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); app.get('/', (req, res) => { res.send('<h1>我的本地测试站点 🚀</h1><p>这是从本地服务器返回的内容</p>'); }); app.listen(8080, () => { console.log('本地服务器跑在 http://localhost:8080'); });
安装依赖并启动:
npm install express node server.js
2. 把本地服务暴露到公网
用ngrok转发(先安装ngrok):
ngrok http 8080
运行后会得到一个公网地址,比如https://abc123.ngrok.io。
3. 在外部网站嵌入这个公网地址
在外部网站的HTML里用<iframe>标签嵌入:
<!-- 外部网站的HTML代码 --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>嵌入本地站点示例</title> </head> <body> <h2>这是外部网站,下面是嵌入的本地服务:</h2> <iframe src="https://abc123.ngrok.io" width="800" height="400" frameborder="0" style="border: 1px solid #eee; border-radius: 8px;" ></iframe> </body> </html>
打开这个外部网站的HTML,就能看到嵌入的本地服务内容了。
内容的提问来源于stack exchange,提问作者J Edwards
相关产品推荐
相关产品推荐

