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

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

更多关于uni-app renderjs 访问h5(https)时无法播放http协议的视频的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app renderjs 访问h5(https)时无法播放http协议的视频的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在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提供,或者在你的服务器上设置反向代理来确保所有请求都是安全的。这不仅可以解决跨协议请求的问题,还可以提高你的应用安全性。

回到顶部