我有一个ASP.NET web应用程序,其中页面上的Microsoft Media Player对象(在IE中)发出对.aspx网页的请求。在页面中,我使用TransmitFile发回音频文件。这在大多数情况下都工作得很好。
但是,在某些情况下( IE版本和特定客户端的组合,至少在我看来是这样),还有第二个请求发出,具有完全相同的URL。我能看到的第一个和第二个请求之间的唯一区别是user-agent值。第一个请求将具有User-Agent: Windows-Media-Player/9.00.00.4508,第二个将具有User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
第二个请求导致音频文件第二次通过网络发送,这是浪费的。这就是我想要避免的。
我有一个相关的问题here,但在本例中没有Range请求。这又是完全相同的请求(除了user-agent之外,头都是一样的)。
我试图用所有类型的HTTP状态响应(304、404、500等)来抑制第二个响应(基于头部中的用户代理)。这对于某些客户端,有时是有效的,但偶尔会中断(媒体播放器将不会播放音频,即使Fiddler会显示它是在第一次请求时传输的)。
如果可能的话,我想“说服”浏览器避免第二个请求。作为第二个选项,我希望找到对第二个请求的响应,该响应不会中断回放,但避免发送整个音频缓冲区。
发布于 2010-10-16 07:21:12
到目前为止,我能想到的唯一一件事是,也许他们安装了一个插件/工具栏,当它检测到媒体时,它试图做一些事情。
我认为VLC为火狐做了类似的事情,我知道火狐有很多类似“视频下载器”的插件,也许也有为IE开发的等价物。
你可以试着让有问题的客户给你他们的插件列表(在IE8中应该是Tools -> Manage Add-ons )。
希望这能有所帮助:)
EDIT:你可以检查的另一件事是让他们在你的网站上尝试启用兼容模式,看看它是否会改变什么。
发布于 2010-10-18 19:39:25
请提供完整的报头转储,您确定两个请求都是GET请求吗?第一个请求可能只是检查缓存的版本是否足够好。
再想想:试着返回“expires”头来抑制缓存检查。
https://stackoverflow.com/questions/3895167
复制相似问题