本文最后更新于2022年7月9日,已超过 1 年没有更新,如果文章内容失效,请 反馈 给我们,谢谢!
记一次A网站调用B网站的M3U8媒体文件浏览器提示跨域报错:“Failed to load http://ceshi/ceshi.m3u8: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://ceshi.com’ is therefore not allowed access.”“Failed to load http://ceshi.com/0000.ts: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://ceshi.com’ is therefore not allowed access.”,B网站的所有M3U8文件都只能使用B网站的域名访问,其它域名无法访问播放不了,在网上找了N多方法卡在了httpd.conf文件的“#LoadModule headers_module modules/mod_headers.so”参数上面我没有把#去掉导致再怎么设置也不行因为没有开启apache头信息自定义模块。只有开启了头信息自定义模块才能识别你自定义的信息呀……
说下方法(均已测试)添加的代码或文件都是在目标服务端不是访问端。
一、如果服务器是Apache
1、打开配置文件“httpd.conf”搜索“LoadModule headers_module modules/mod_headers.so”把前面的“#”号去掉,这是第一步也是必须的一步。;
2.1、打开配置文件“vhosts.conf”找到域名所在的地方添加:“Header set Access-Control-Allow-Origin *”即可,示例如下:
<VirtualHost *:80> DocumentRoot "H:\www" ServerName ceshi.com ServerAlias www.ceshi.com <Directory "H:\www"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted Header set Access-Control-Allow-Origin * </Directory> </VirtualHost>
2.2、如果配置不好怕搞坏了可以省略第2步,但第一步一定要做,然后直接在网站所在的根目录中加入以下.htaccess文件,文件内容为:
<IfModule mod_setenvif.c> <IfModule mod_headers.c> <FilesMatch "\.(m3u8|ts)$"> SetEnvIf Origin ":" IS_CORS Header set Access-Control-Allow-Origin "*" env=IS_CORS </FilesMatch> </IfModule> </IfModule>
二、如果服务器是Nginx
1.1、如果安装了宝塔面板则在location的最下面大括号的上面加入“add_header Access-Control-Allow-Origin *;”即可;
1.2、或者是打开“nginx.conf”文件修改,代码如下:
<span class="hljs-attribute">location</span> <span class="hljs-regexp">~* \.(m3u8|ts)$</span> { <span class="hljs-attribute">add_header</span> Access-Control-Allow-Origin *; }
或者是:
<span class="hljs-attribute">location</span> / { <span class="hljs-attribute">add_header</span> Access-Control-Allow-Origin *; }
IIS服务器没有测试,至于网上说的“crossdomain.xml”我是研究了好久可能我太菜了没研究好也弄不透,根本就没用,而且我觉得这个东西并不好人家可以访问得到能看到里面是啥东西。比如淘宝的:
<cross-domain-policy> <allow-access-from domain="*.taobao.com"/> <allow-access-from domain="*.taobao.net"/> <allow-access-from domain="*.taobaocdn.com"/> <allow-access-from domain="*.tbcdn.cn"/> <allow-access-from domain="*.alicdn.com"/> </cross-domain-policy>
百度的:
<cross-domain-policy> <allow-access-from domain="*.baidu.com"/> <allow-access-from domain="*.bdstatic.com"/> <allow-http-request-headers-from domain="*.baidu.com" headers="*"/> <allow-http-request-headers-from domain="*.bdstatic.com" headers="*"/> </cross-domain-policy>
腾讯的:
<cross-domain-policy> <allow-access-from domain="*.qq.com"/> <allow-access-from domain="*.gtimg.com"/> </cross-domain-policy>