uni-app renderjs 访问h5(https)时无法播放http协议的视频

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app renderjs 访问h5(https)时无法播放http协议的视频

操作步骤:

  • renderjs 访问h5(https)页面,然后播放http协议的视频

预期结果:

  • 可以播放

实际结果:

  • 无法播放

bug描述:

  • renderjs 访问h5(https)时,无法播放http协议的视频

附件:

image

开发环境信息:

项目 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 14.4.1 (23E224)
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 HarmonyOS NEXT
手机系统版本号 HarmonyOS NEXT Developer Preview
手机厂商 华为
手机机型 mate60
页面类型 nvue
vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

1 回复

在uni-app中,由于安全策略和浏览器同源策略的限制,当你在使用HTTPS协议访问H5页面时,通常无法直接播放HTTP协议的视频。这是因为现代浏览器为了防止中间人攻击(MITM),禁止了从安全上下文(HTTPS)加载非安全资源(HTTP)的行为。

为了解决这个问题,你有几种可能的方案,但请注意,这些方案可能需要根据你的具体需求和环境进行调整。以下是一些可能的解决方案及其相关代码示例:

方案一:使用HTTPS视频源

最直接的方法是确保你的视频资源也通过HTTPS协议提供。这样,你就可以避免跨协议请求的问题。

<!-- 假设你的视频已经通过HTTPS提供 -->
<video src="https://your-secure-video-url.com/video.mp4" controls></video>

方案二:使用反向代理

如果你无法控制视频源的协议,但你可以控制服务器,你可以在服务器上设置一个反向代理,将HTTP请求重定向到HTTPS视频源(如果视频服务器支持HTTPS)。

在服务器上(例如使用Node.js Express):

const express = require('express');
const request = require('request');
const app = express();

app.get('/proxy-video', (req, res) => {
  const videoUrl = 'http://your-insecure-video-url.com/video.mp4';
  request(videoUrl).pipe(res);
});

app.listen(3000, () => {
  console.log('Proxy server is running on port 3000');
});

然后在uni-app中:

<video src="https://your-server.com/proxy-video" controls></video>

方案三:使用CORS和iframe(不推荐,有安全风险)

如果视频服务器允许跨源资源共享(CORS),并且你接受潜在的安全风险,你可以尝试将视频嵌入到一个iframe中,但这种方法不推荐,因为它可能引入新的安全问题。

<!-- 在你的HTML中 -->
<iframe src="http://your-insecure-video-page.com" width="600" height="400"></iframe>

注意:这种方法不仅可能受到浏览器安全策略的限制,而且如果视频页面包含额外的JavaScript或广告,它可能会干扰你的应用体验。

总结

推荐的做法是确保所有资源都通过HTTPS提供,或者在你的服务器上设置反向代理来确保所有请求都是安全的。这不仅可以解决跨协议请求的问题,还可以提高你的应用安全性。

回到顶部