在iOS 10中的Safari上,我的视频不起作用,只显示播放图标。
我通过asp.net服务器提供视频,该服务器会检查以确保用户已登录并可以访问该视频。只有在iOS 10上,服务器才会响应401 Unauthorized!
使用下面的代码进行一些测试,我发现iOS 9上的safari发送了“.ASPXAUTH”cookie - 但iOS 10上的safari却没有!
<video crossorigin="use-credentials" controls autoplay="autoplay">
<source src="/Server/GetVideo.ashx?id=123"/>
</video>
为什么safari无法播放我的视频?有什么办法可以解决吗?
答案 0 :(得分:2)
我们在完全不同的技术堆栈(Linux,PHP,Moodle)上遇到了完全相同的问题。我们的会话cookie不会随视频(和音频)请求一起发送。
我们无法找到让iOS在这里正常运行的方法,所以我们正在做一个紧急补丁,通过检测iOS 10并将其发送到另一个脚本来提供视频来解决问题,通过此脚本路径中的会话cookie值的安全加密版本,然后执行各种黑客操作,以便路径中的值用于从该脚本中识别会话(而不是不存在的cookie)。这种变化有效,但很复杂,对安全性影响很小,并且可能难以在不同的技术上实施。
这似乎是iOS 10的一个主要问题,所以我希望它可能会在未来的更新中修复。此外,我注意到虽然我们的会话cookie不包含在视频中,但还包括其他几个cookie!我实际上无法弄清楚哪些不是。 (我尝试过的第一件事就是使用timed-expiry而不是session cookie,但这并没有随视频一起发送。)
答案 1 :(得分:2)
可在此处找到解决方案:
HTML5 video/audio player on mobile Safari (iOS 7 & iOS 10) excludes cookies
为Cookie设置过期日期,iOS 10中的视频播放器可以回读Cookie。 iOS 10中的视频播放器无法回读没有过期日期的会话cookie。
答案 2 :(得分:2)
我的解决方案在这里: https://stackoverflow.com/a/40015409/7012293
如果缺少会话cookie,基本上你需要发送403 forbidden。 Safari将使用会话cookie重试。