所有线路,手机和电脑都不能播放,不知都啥原因,暂时之前的自制ck播放器播放M3U8突然不能播放了。换cms自带的dplayer播放了。。
播放自己资源时候有如下错误提示:
Access to XMLHttpRequest at 'https://dy.wudidiany.top/aaa/aa/aa/b7213213/index.m3u8' from origin 'https://www.51wddy.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
核心结论:这是跨域资源共享(CORS)限制导致的请求被拦截,前端无法直接访问目标 m3u8 视频资源。
关键原因
- 浏览器的同源策略禁止不同域名(51wddy.com 和 wudidianying.top)直接交互数据。
- 目标服务器(wudidianying.top)未返回
Access-Control-Allow-Origin响应头,未授权前端域名访问。 - m3u8 通常是视频分片文件,跨域限制是服务器层面的安全配置,前端无法单独绕过。
解决方向
- 前端方案:通过代理服务器转发请求(如 Nginx 反向代理、后端接口中转),让请求从同源域名发出。
- 服务器方案:目标服务器配置 CORS 规则,添加
Access-Control-Allow-Origin: https://www.51wddy.com(或*允许所有域名)。 - 替代方案:若无法修改服务器配置,可更换同域名下的视频资源链接,或使用支持跨域的视频分发服务。
最后解决方法是:
可以提供一个通用的 Nginx 配置代码,如果你是某个网站的管理员,可以在自己的服务器上添加这些配置,以允许其他域名跨域访问你的资源。
通用的 Nginx CORS 授权配置
将以下代码添加到你的 Nginx 配置文件中(通常是在 server 块内):
# 允许所有域名跨域访问(不推荐在生产环境中使用)
add_header Access-Control-Allow-Origin *;
# 允许指定的域名跨域访问(推荐)
# add_header Access-Control-Allow-Origin https://www.51wddy.com;
# 允许的请求方法
add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
# 允许的请求头
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
# 允许发送 Cookie(如果需要)
add_header Access-Control-Allow-Credentials 'true';
# 处理 OPTIONS 预检请求
if ($request_method = 'OPTIONS') {
return 204;
}
配置说明
Access-Control-Allow-Origin:*:允许所有域名访问。这是最宽松的配置,适合开发环境或公开的 API,但不推荐在生产环境中使用,因为它会带来安全风险。https://www.51wddy.com:只允许www.51wddy.com这个域名访问。这是最安全、最推荐的配置方式。
Access-Control-Allow-Methods:指定允许的 HTTP 请求方法。Access-Control-Allow-Headers:指定允许的自定义请求头。Access-Control-Allow-Credentials:如果你的请求需要携带 Cookie 或 HTTP 认证信息,需要将其设置为true。if ($request_method = 'OPTIONS'):这是处理预检请求(Preflight Request)的关键。当浏览器发起一个复杂的跨域请求时,会先发送一个OPTIONS请求来询问服务器是否允许该跨域请求。服务器需要对此做出响应,通常返回204 No Content。
如果用了反向代理,需要添加到反向代理中,直接上反向代理配置文件
#PROXY-START/
# 1. 处理媒体文件的反向代理,并添加 CORS 配置
location ~* \.(jpg|png|ts|m3u8|gif|jpeg|ttf|webp|woff|woff2|ico)$ {
# CORS 配置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
# 处理 OPTIONS 预检请求
if ($request_method = 'OPTIONS') {
return 204;
}
# 反向代理配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass https://反向代理域名.com;
# 缓存配置
proxy_cache cache_one;
proxy_cache_valid 60d;
proxy_ignore_headers Cache-Control;
add_header X-Cache "$upstream_cache_status from $server_addr";
}
# 2. 处理所有其他请求的反向代理,并添加 CORS 配置
location / {
# CORS 配置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
# 处理 OPTIONS 预检请求
if ($request_method = 'OPTIONS') {
return 204;
}
# 反向代理配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass https://反向代理域名.com;
# 超时配置
proxy_read_timeout 3000s;
proxy_connect_timeout 750s;
}
#PROXY-END/
播放设置,播放错误,













