我正在尝试将流视频提供给嵌入在源代码中的我无法控制的外部html5视频标记。 (3D虚拟世界,cloudparty)。
为了让视频资产完全可用,视频资产服务器必须支持CORS,并且我已经成功地为非流媒体资产做了这项工作。 http流视频出现问题。编码器(VLC)对CORS一无所知,因此我必须代理它生成的http流。使用mod_proxy,我能够呈现所需的标头。我已将此添加到我的虚拟主机apache中:
<IfModule mod_proxy.c>
# Mod_proxy Module
ProxyReceiveBufferSize 16384
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<LocationMatch "/vlcstreams">
# VLC server stream
ProxyPass http://localhost:8081
#ProxyPassReverse http://localhost:8081
Header set Access-Control-Allow-Origin "https://www.cloudparty.com"
Header set Access-Control-Allow-Methods "GET"
Header set Access-Control-Allow-Headers "Range, Accept-Encoding"
Header set Accept-Ranges bytes
#Header set Content-Length "-1"
</LocationMatch>
</IfModule>
现在,如果我使用Firefox,一切都很好。流在3D虚拟世界中播放得很好。但是,在使用Chrome时,它会坚持向我的服务器发送OPTIONS预检请求。我的服务器响应501 - 未实现。我不确定它是否将选项请求传递给VLC http服务器,或者它正在做什么。无论如何,无论如何,我都需要回复200。我已经尝试了一些重写来响应所有选项请求,但我最终完全关闭了该虚拟主机。
如果我以“不安全”模式启动Chrome,它也可以正常播放......所以这表明它绝对是一个跨域安全问题。
在代理像这样的流时,apache是否有办法响应这些OPTIONS预检请求?