设置跨域规则后调用OSS时仍然报“No 'Access-Control-Allow-Origin'”的错误


跨域是什么,及新版本浏览器安全机制,一篇相对权威详细的介绍文档:​​https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS​

别走开,这篇文章能解决你不少问题


记录一次使用阿里云oss跨域问题,


问题:直播流地址播放,个别电脑的个别浏览器(这里是chrome,版本81.0.4044.138, 64)请求不到视频流,控制台报错是跨域(No 'Access-Control-Allow-Origin'”),当时情况(大部分电脑没问题,阿里云控制台已经设置了跨域)。

阿里云给的解决:​​https://help.aliyun.com/knowledge_detail/39518.html?spm=a2c4g.11186623.2.25.5c77c451UV4ZPS​

阿里云的解决方式就是在后台设置允许跨域,(*),全部允许跨域。

解决方案:正在解决,稍后同步。



时间2020-0508-11:41。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

现在是202005091345 问题已经定位到,是chrome新版本的安全策略,如果你想用,执行以下步骤,但是,你不能指望所有用户都执行以下步骤。

Chrome浏览器开启Ajax跨域访问调试

在当今前后端分里模式开发越来越多,使用Ajax进行数据交互时常有跨越发生。

  本文说明如何让Chrome浏览器支持开发时的Ajax跨域访问。

1.升级Chrome到最新版本

参考下面经验"​如何离线安装Chrome最新版本或某一特定版本?​",将Chrome升级到最新版本。

​如何离线安装Chrome最新版本或某一特定版本?​


2.方法一,创建一个调试用的Chrome快捷方式(这种方式治标不治本,用户不会统一改的,除非你放弃他们,看后续...)

右键选择Chrome快捷方式,在弹出的右键菜单中选择"​创建快捷方式​",重命名新建的快捷方式为​Chrome-Debug​。

设置跨域规则后调用OSS时仍然报“No ‘Access-Control-Allow-Origin‘”的错误_阿里云设置跨域规则后调用OSS时仍然报“No ‘Access-Control-Allow-Origin‘”的错误_阿里云_02


3.打开Chrome-Debug快捷方式属性

右键选择​Chrome-Debug​快捷方式,右键菜单中选择"​属性​",打开Chrome-Debug快捷方式属性设置对话框。

设置跨域规则后调用OSS时仍然报“No ‘Access-Control-Allow-Origin‘”的错误_新版本_03


4.增加启动参数

在目标后面增加如下的启动参数:​--user-data-dir="c:\ChromeDebug" --test-type --disable-web-security ​,点"​确定​"按钮保存设置。完整的目标内容如下所示:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir="c:\ChromeDebug" --test-type --disable-web-security

注:

  • 每个--前面都有一个空格。
  • disable-web-security需要搭配user-data-dir参数一起设置。


5.打开Chrome-Debug

因为启动参数中增加了--user-data-dir="c:\ChromeDebug",表示Chrome会从c:\ChromeDebug中存取用户数据,因该目录可能为空,所以新打开的Chrome-Debug窗口是一个全新的Chrome,没有书签、历史、扩展程序等内容,需要再重新安装扩展程序。

设置跨域规则后调用OSS时仍然报“No ‘Access-Control-Allow-Origin‘”的错误_chrome_04


6.调试跨域访问

再次打开之前出错的程序,就可以发现Ajax已经可以正常跨域访问了。

参考自百度经验

待续...

现在是202005101723

这个问题的原因是,使用了非阿里云播放器。

据前端解释,阿里云播放器播放阿里云播放流,前端js有后门。使用其他播放器会有跨域问题。