我有一个简单的网页,它使用HTML 5音频标签进行流式传输。我已经设置了IIS7重写规则,以便浏览器无法直接下载MP3文件,但仍然可以通过音频控件进行流式传输。这适用于我的桌面(Chrome 37.0.2062.124 m),但不适用于我的Android设备(Samsung Galaxy S5)。我无法在Android上下载该文件,但我也无法对其进行流式处理。当我禁用重写规则时,两个设备上的流媒体工作正常,但当然也可以直接下载该文件。
这是我的页面:
<div>
<h3>
Audio
</h3>
<audio controls="controls" preload="auto">
<source src="audio.mp3" type="audio/mpeg">
</audio>
</div>
这是我的web.config:
<rewrite>
<rules>
<rule name="Prevent MP3 Hotlinking" enabled="true">
<match url=".*\.(mp3)$" />
<conditions>
<add input="{HTTP_REFERER}" pattern="^$" negate="true" />
<add input="{HTTP_REFERER}" pattern="http://www.example.com/.*" negate="true" />
</conditions>
<action type="Rewrite" url="http://www.example.com" />
</rule>
</rules>
</rewrite>
有什么想法吗?
谢谢!
编辑: 我已将手机设置为使用我的PC作为代理,因此我可以使用Fiddler2来监控流量。一些奇怪的事情正在发生。
从我的PC(有效),浏览器启动MP3文件的GET并正确接收HTTP 206响应。从我的手机(它没有工作),它首先发出一个GET到MP3文件,收到206响应,但然后立即启动另一个没有HTTP_REFERER的MP3文件的GET,这当然导致它失败到期到URL重写。我不确定我还能做些什么,这只是我手机上Chrome浏览器的问题吗?
答案 0 :(得分:0)
您的服务器是否正在进行重定向?如果是这样,您是否在Android客户端中关注这些重定向?如果没有,那可能是你的问题。
答案 1 :(得分:0)
我可能已经想到了这一点。尝试在您的条件中添加以下内容:
<add input="{HTTP_USER_AGENT}" pattern="iPhone" negate="true" />
。
将iPhone用户代理更改为适合您的Galaxy S5的任何内容。这对我有用,虽然我没有进行重定向,而是自定义响应,例如“找不到文件”。我也没有像你一样使用空引用模式。
上找到了这个