我正在使用 IIS 作为媒体服务器来开发 DLNA 服务器。某些 DLNA 客户端发送 http HEAD 带有范围标头的请求:
Command: HEAD
+ URI:/RicDLNA/Streamer.ashx?media=/Videos/Guca%20Distant%20Trumpet/Gucha%20Distant%20Trumpet.mp4 协议版本:HTTP/1.1 主机:192.168.1.100 范围:字节=0- TransferMode.dlna.org:流媒体 标头结尾:CRLF
我仅回复“Accept-Ranges Bytes”。但 IIS 会发出状态代码 416 错误。看起来这个错误状态阻止了客户端继续。
在 ietf.org RFC7233 部分 3.1 Range 您可以找到摘录
服务器必须忽略通过 GET 之外的请求方法接收到的 Range 标头字段
对我来说,这意味着:您可以使用 HEAD 命令发出范围请求,但您的服务器必须忽略它。
IIS 6.0 和 IIS 7.0 将接受包含 Range 标头的 HEAD 请求(并将返回某些媒体播放器(如 Popcorn Hour A-100)所期望的状态 206)。
我最近需要让 IIS 7.5 像 IIS 6.0 / 7.0 一样对待这些请求,并且能够使用 Beta http.sys v6.1.7000.0 和 pre-Beta static.dll v6.1.6801.0 (驱动程序必须在 64 位版本的 Windows 上规避签名强制)