V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cowiejulewbfwo
V2EX  ›  程序员

云服务器推送的 JavaScript 没法控制局域网内设备?

  •  
  •   cowiejulewbfwo · 1 天前 · 1260 次点击

    💻 项目情况与问题排版 (Project Status and Issue Formatting)

    一、项目背景与初始设计 (Background and Initial Design)

    您的项目是在云端搭建了一个平台 (Cloud Platform),集成了多个传感器控制程序。

    • 平台架构 (Platform Architecture):
      • 云端 (Cloud):核心平台和控制逻辑。
      • 客户端 (Client):用户笔记本电脑 (Laptop),运行浏览器。
    • 通信需求 (Communication Requirements):
      • 主要目标:通过串口通信 (Serial Communication) 控制传感器进行数据采集 (Data Acquisition)。
    • 初始设计 (Initial Design):
      1. 访问 (Access): 笔记本通过浏览器访问云端平台网站。
      2. 脚本推送 (Script Push): 云端将 JavaScript 脚本 (JavaScript Scripts) 推送 (Pushed) 到笔记本上。
      3. 串口连接与控制 (Serial Connection and Control): 笔记本利用 Web Serial API 连接本地串口,与传感器进行通信和控制。
      4. 数据回传 (Data Feedback): 采集到的数据返回 (Returned) 到云端。

    二、当前遇到的瓶颈 (Current Bottleneck)

    由于新增了一个使用 HTTP 通信 (HTTP Communication) 的传感器,导致了安全策略限制问题。

    • 问题描述 (Issue Description):

      **出于安全考虑 (For security reasons)**,浏览器绝对禁止一个从服务器(例如 $https://your-app.com$)加载的网页,去直接访问或连接您本地局域网的另一个 IP 地址(例如 $http://192.168.1.89$)。

    • 策略限制 (Policy Constraints): 此限制主要受以下浏览器安全策略的阻止 (Blocked):

      1. 跨域资源共享 (Cross-Origin Resource Sharing, CORS)
      2. 混合内容 (Mixed Content) 策略
    • 本质问题 (Root Cause): 您试图从一个 **安全上下文 (Secure Context)**(云端 HTTPS 网站)发起的页面中,向一个 **不安全/本地上下文 (Insecure/Local Context)**(本地局域网的 $http://IP$ 地址)发起请求,这在现代浏览器中是严格禁止的。


    • 有什么解决办法吗?
    14 条回复    2025-11-18 15:38:54 +08:00
    Becod
        1
    Becod  
       1 天前
    安全限制,没法绕过
    用 electron 或者 tauri 封装一下吧
    Becod
        2
    Becod  
       1 天前
    忘记了 cors ,所以局域网里面设置一下 Access-Control-Allow-Origin 看看
    前提是局域网和云端都用 http 或者 https
    或者用 websocket

    可以参照一下 postman 是怎么处理这个的(本质上应该相同吧
    cowiejulewbfwo
        3
    cowiejulewbfwo  
    OP
       1 天前
    @Becod 问了 ai ,貌似也不行。
    目前想的就是笔记本上跑个 python 代理程序,http 通信让 python 代理程序做。但是就得单独打开一个应用,烦得很,做这个平台的目的就是为了集成,结果搞不成。
    caola
        4
    caola  
       1 天前
    使用一个二级域名指向这个内网 IP,然后绑定这个域名和对应的 SSL ,例如 192-168-1-11.example.com ,可以提前解析所有的内网 IP
    Puteulanus
        5
    Puteulanus  
       1 天前
    好像有启动参数能关掉浏览器的跨域检查,就自己专项专用可以试试呗
    https://medium.com/@beligh.hamdi/run-chrome-browser-without-cors-872747142c61

    跑起来的浏览器别拿来干其他的就是了
    ntedshen
        6
    ntedshen  
       1 天前
    根据 ip 段做的限制,你给本地做个公网的 ip 段其实也无所谓。。。
    pingdog
        7
    pingdog  
       1 天前 via iPhone
    参考下 localsend
    StarUDream
        8
    StarUDream  
       1 天前
    PNA ,本地设备需要加下面这个头

    ```
    Access-Control-Allow-Private-Network: true
    ```

    或者在你本地搭建一个反向代理
    wecgwm1998yichen
        9
    wecgwm1998yichen  
       1 天前
    之前见过一个 web 项目也遇到过类似的问题,后面改成 windows 应用似乎就解决了
    mmc
        10
    mmc  
       20 小时 15 分钟前
    如果传感器 http 能加 tls 和允许跨域 header 就好办,不行也可以试试浏览器插件
    cowiejulewbfwo
        11
    cowiejulewbfwo  
    OP
       19 小时 14 分钟前
    @Puteulanus 这样弄,有的客户不会搞,得做得无脑一点
    cowiejulewbfwo
        12
    cowiejulewbfwo  
    OP
       19 小时 10 分钟前
    @StarUDream 这个也不行,传感器是买的,封装好的,搞不了
    cowiejulewbfwo
        13
    cowiejulewbfwo  
    OP
       19 小时 8 分钟前
    @mmc 不行,做个浏览器插件确实可以实现
    cowiejulewbfwo
        14
    cowiejulewbfwo  
    OP
       19 小时 7 分钟前
    @wecgwm1998yichen 桌面应用就不存在这个问题了,就是浏览器环境下有这个安全问题
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5756 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    ♥ Do have faith in what you're doing.