播放视频报403 forbidden的原因及解决方案

本文介绍了因缺少referrer字段导致的视频防盗链问题及其解决方法。通过在HTML头部添加特定标签,可以有效避免因referrer缺失引发的403错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原因

1、原因:我们知道,在页面引入图片、JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段。图片服务器通过检测 Referrer 是否来自规定域名,来进行防盗链。如果没有设置referrer,那就可以直接绕过防盗链机制,直接使用或盗取。

   <video
        width="200px"
        height="150px"
        controls
        autoplay
        src="http://vd2.bdstatic.com/mda-mjtjk7ck9dmcx0kt/cae_h264/1635505796467794816/mda-mjtjk7ck9dmcx0kt.mp4" >
   </video>

报错403在这里插入图片描述
在这里插入图片描述

然而直接复制地址,在新窗口打开,却没有任何问题,可以正常访问。

二、解决办法:

直接在index.html添加以下代码

<meta name=referrer content=no-referrer>

完美解决

注意:此方法会破坏浏览器原有的 referer 策略,所有从包含了上面标签的页面中发起的请求将不会携带referer。慎用!

三、Referrer Policy 介绍

新的 Referrer Policy 规定了五种 Referrer 策略:No Referrer、No Referrer When Downgrade、Origin Only、Origin When Cross-origin、和 Unsafe URL。之前就存在的三种策略:never、default 和 always,在新标准里换了个名称。他们的对应关系如下:
在这里插入图片描述
可以看到,新标准给之前的三种策略赋予了更具意义的新名称,同时还增加了两种新策略。另外现阶段支持 Referrer Policy 的浏览器保留了对旧标准的支持,但还是推荐大家尽快更新。简单介绍下这五种类型的具体含义:

  1. No Referrer:任何情况下都不发送 Referrer 信息;
  2. No Referrer When Downgrade:仅当发生协议降级(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer 信息。这个规则是现在大部分浏览器默认所采用的;
  3. Origin Only:发送只包含 host 部分的 Referrer。启用这个规则,无论是否发生协议降级,无论是本站链接还是站外链接,都会发送 Referrer 信息,但是只包含协议 + host 部分(不包含具体的路径及参数等信息);
  4. Origin When Cross-origin:仅在发生跨域访问时发送只包含 host 的 Referrer,同域下还是完整的。它与 Origin Only 的区别是多判断了是Cross-origin。需要注意的是协议、域名和端口都一致,才会被浏览器认为是同域;
  5. Unsafe URL:无论是否发生协议降级,无论是本站链接还是站外链接,统统都发送 Referrer 信息。正如其名,这是最宽松而最不安全的策略;
### Vue 项目 MP4 文件预览返回 403 错误解决方案 在处理 Vue 项目中的 MP4 文件预览时,如果遇到 HTTP 403 Forbidden 错误,通常意味着服务器拒绝了请求。这可能是由于权限设置不当、CORS 配置错误或其他安全策略引起的。 #### 可能的原因分析 1. **跨域资源共享(CORS)** 设置不正确 如果前端应用和视频资源位于不同的域名下,则需要确保服务器端已正确配置 CORS 头部信息[^1]。 2. **文件路径或 URL 不正确** 确认用于访问 MP4 文件的相对/绝对路径是否准确无误,并且该位置确实存在目标媒体文件。 3. **认证机制冲突** 若网站启用了某种形式的身份验证(如 OAuth),则需检查是否有额外的安全措施阻止未授权用户的直接访问行为。 4. **Web Server 或 CDN 缓存问题** 当使用 Web server 或者通过 CDN 提供静态资源服务时,某些缓存规则可能导致临时性的不可达状况发生。 5. **浏览器同源政策(SOP)限制** 浏览器出于安全性考虑,默认情况下不允许不同源之间的数据交互;因此要特别注意 HTML `<video>` 标签内的 `src` 属性指向地址与当前页面所在站点的关系。 #### 实际操作建议 为了有效解决问题并实现稳定的 MP4 文件播放功能: - 审查 Nginx/Apache/IIS 等 web servers 的配置文件,确认对于 `/static/videos/*` 路径下的资源允许来自特定来源的 GET 请求。 对于 Nginx 用户来说,可以在 location 块内加入如下指令来放宽 CORS 控制: ```nginx add_header 'Access-Control-Allow-Origin' '*'; ``` - 使用开发者工具审查网络请求详情,查看具体的响应头字段,特别是 status code 和 Access-Control-* 开头的相关头部信息,以此判断是否存在明显的权限不足提示。 - 将 MP4 文件放置到公共可读取目录中测试,排除因存储层面上限制造成的影响因素。 - 清除本地及远程代理上的任何潜在缓存记录,尝试重新部署最新版的应用程序代码和服务端脚本。 ```javascript // 示例:Vue 组件内部定义 video player <template> <div class="player-container"> <!-- 注意 src 地址应为合法有效的链接 --> <video controls :src="mp4Url"></video> </div> </template> <script setup lang="ts"> import { ref } from "vue"; const mp4Url = ref("/path/to/video.mp4"); </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值