我们有一个托管在 IIS6 中的站点,我们使用 .NET 1.1 框架构建。访问此站点的用户仅使用 Internet Explorer 并使用 Forms 身份验证登录。在站点内,用户可以导航到其中嵌入了 iFrame 的特定页面。此 iFrame 指向托管在同一服务器上的另一个虚拟目录,而这第二个虚拟目录只是流式传输电影文件。假设用户在他们的机器上安装了 Windows Media Player 并对其进行了配置,以便 Windows Media Player 成为默认的电影播放器,当用户导航到带有 iFrame 的页面时,Windows Media Player 会弹出一个新窗口并播放电影。
我们最近升级了我们的软件以使用 .NET 3.5 框架。但是,我们注意到我们的电影文件不再播放。相反,我们收到一条消息,表明 Windows Media Player 无法连接到服务器。
我已经继续使用 Fiddler 对客户端和服务器计算机之间的网络流量进行了一些调查,这些是在工作场景中发生的步骤:
1) Internet Explorer 向服务器请求电影文件。请求标头包含正确身份验证和会话标识所需的 cookie。
*GET MYSITE HTTP/1.1
接受:image/jpeg、image/gif、image/pjpeg、application/x-ms-application、application/xaml+xml、application/x-ms-xbap、application/vnd.ms-excel、 application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, /
Referer: MYREFERRER
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;InfoPath.2)
接受编码:gzip,放气
主机:MYHOST 连接:保持活动
饼干:a99fd71e-eb1b-4750-a391-5ad8cfe32068=800edb77-9649-4f93-9db9-98d678a3b166;ASP.NET_SessionId=uf1cr1bflwly0nmhbm1wnb55;EDDS=581A46E81C8DB0B475F1AFE00545F9B157A377BD31DF65BB2AEF7D1B293BDE9E178409FF251CF49F109FDC601C48F15A5FCDE1A29A18E6853357887698A01E7A2CC3690ECE98C464DE1359D796B60BE969F875EF08F638A04CDED78A309ACD6E9732F8C3751A2B0A411ADFA91B0AE567*
2)服务器使用cookies验证用户的请求,然后返回电影。返回的状态码是 200。
HTTP/1.1 200 OK
日期:2010 年 8 月 11 日星期三 21:30:55 GMT
服务器:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
X-AspNet-Version: 1.1.4322
内容长度:3934146
接受范围:字节
内容处置:内联;文件名 = AS000006.wmv
上次修改时间:2010 年 8 月 10 日星期二 21:24:49 GMT
ETag:“MyExampleFileID”
缓存控制:私有
内容类型:应用程序/八位字节流
3) Windows Media Player 向服务器请求电影文件。同样,请求标头包含 cookie。但是,这次请求包括对字节 8192- 的 Range 请求。
*GET MYSITE HTTP/1.1
Accept: /
User-Agent: Windows-Media-Player/12.0.7600.16415
Accept-Encoding: gzip, deflate
Range: bytes=8192-
unless-Modified-Since: Tue, 10 Aug 2010 21:24: 49 GMT
If-Range: "MyExampleFileID"
Connection: Keep-Alive
Host: MYHOST
Cookie:ASP.NET_SessionId=uf1cr1bflwly0nmhbm1wnb55;EDDS=581A46E81C8DB0B475F1AFE00545F9B157A377BD31DF65BB2AEF7D1B293BDE9E178409FF251CF49F109FDC601C48F15A5FCDE1A29A18E6853357887698A01E7A2CC3690ECE98C464DE1359D796B60BE969F875EF08F638A04CDED78A309ACD6E9732F8C3751A2B0A411ADFA91B0AE567; a99fd71e-eb1b-4750-a391-5ad8cfe32068=800edb77-9649-4f93-9db9-98d678a3b166*
4)服务器使用cookie信息对用户的请求进行认证,然后返回文档。返回的状态码是 206。
HTTP/1.1 206 Partial Content
Date: Wed, 11 Aug 2010 21:30:57 GMT
服务器: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version :1.1.4322
内容范围:字节 8192-3934145/3934146
内容长度:3925954
接受范围:字节
内容处置:内联;文件名 = AS000006.wmv
上次修改时间:2010 年 8 月 10 日星期二 21:24:49 GMT
ETag:“MyExampleFileID”
缓存控制:私有
内容类型:应用程序/八位字节流
当事情不起作用时,它看起来像这样:
1) Internet Explorer 向服务器请求电影文件。请求标头包含 cookie。
*GET MYSITE HTTP/1.1
接受:image/jpeg、image/gif、image/pjpeg、application/x-ms-application、application/xaml+xml、application/x-ms-xbap、application/vnd.ms-excel、 application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, /
Referer:MYREFERRER Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;InfoPath.2)
接受编码:gzip,放气
主机:MYHOST
连接:保持活动
曲奇:a99fd71e-eb1b-4750-a391-5ad8cfe32068=7ac4710e-1434-43c9-b521-bdf30328e2fb;ASP.NET_SessionId=glytwo55ztohig451qrf1355; EDDS=CFC5EAE69F6D6CDD0A1D53632F01629F8AC8F4901A6106DD26A0A9F4E1E0B0EC9D4B1B78FBEF5C504A54E6B1A43F576CD846ADD3D394DF257EBBF982BED5E99900116945191268E985ED923DAA78DF4FBD68B09FF3B4D14D7092FB846012E5F464D9EBC4BA834235839A397A4F00B548D353A1AB9B67F6F960E26FC655D19D4B89347DFA2BCC7101E2397AC7EB0F105025E5A21253C0E619E809C1D9B64E53E8*
2)服务器使用cookies验证用户的请求,然后返回电影。返回的状态码是 200。
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 3934146
Content-Type: application/octet-stream
Last-Modified: Wed, 11 Aug 2010 15:29:44 GMT
Accept -范围:字节
ETag:“MyExampleFileID”
服务器:Microsoft-IIS/7.5
X-AspNet-Version:2.0.50727
Content-Disposition:内联;文件名 = AS000006.wmv
X-Powered-By:ASP.NET
日期:2010 年 8 月 11 日星期三 21:36:45 GMT
3) Windows Media Player 向服务器请求电影文件。该请求不包含任何 cookie。服务器无法对用户进行身份验证,并且电影没有被发送下来。
*GET MYSITE HTTP/1.1
Accept: /
User-Agent: Windows-Media-Player/12.0.7600.16415
Accept-Encoding: gzip, deflate
Range: bytes=8192-
unless-Modified-Since: Wed, 11 Aug 2010 15:29: 44 GMT
If-Range: "MyExampleFileID"
Connection: Keep-Alive
Host: MYHOST*
所以,在这一点上,我确切地知道它为什么不起作用。来自 Windows Media Player 的请求不包含任何 cookie,因此我们的服务器不会验证请求并发送数据。我完全不明白的是,为什么 Windows Media Player 在发出请求时没有使用这些 cookie。
以上所有请求都是从同一台机器向两个不同的站点发出的,所以我知道这不是不同版本的 Windows Media Player 的问题。我已经在具有不同操作系统和不同版本 IE 的几台不同机器上重现了该行为,因此它似乎与特定机器无关。我已经尝试恢复到 IIS6 而不是为新站点使用 IIS7,这也没有什么不同。我一直认为它必须是我的代码中的某些东西,但我什至不知道从哪里开始寻找。
我的问题是:有没有人真正了解 Internet Explorer 如何将 URL 信息传递给 Windows Media Player,并可能为我指出正确的方向来解决这个问题?在这一点上,我唯一的另一个选择是向 Microsoft 支持开一张票……坦率地说,在过去的几年里,我在他们的支持团队中的经验并不是最佳的。任何帮助将不胜感激!
编辑:使用进程资源管理器,我已经能够证明 IE 现在根本没有向 Windows Media Player 提供 cookie 信息。不过,我仍然没有更接近理解原因。