当我尝试在设备上续订 UPnP 事件订阅时,我收到 412 HTTP 错误:前提条件失败,SID 错误。
此错误仅在一台设备上发生,所有其他设备都可以正常工作。Buggy 设备是 D-Link XTreme N GIGABIT 路由器 DIR-655(固件版本:1.34WW,2010/09/30),硬件版本:A4。
UPNP 订阅日志(被 Wireshark 捕获)
订阅:
SUBSCRIBE /l3fw HTTP/1.0
Host: 192.168.0.1
CALLBACK: <http://192.168.0.100:7169/evt/43E47718-E7F6-D950-A503-71346C1D9944>
NT: upnp:event
TIMEOUT: Second-60
HTTP/1.1 200 OK
SID: uuid:5B68F900-2863-104D-8000-002401F35BC2
TIMEOUT: Second-60
SERVER: ipOS/7.6 UPnP/1.0 ipGENADevice/1.0
续订:
SUBSCRIBE /l3fw HTTP/1.0
Host: 192.168.0.1
SID: uuid:5B68F900-2863-104D-8000-002401F35BC2
TIMEOUT: Second-60
HTTP/1.1 412 Precondition Failed, bad SID
SERVER: ipOS/7.6 UPnP/1.0 ipGENADevice/1.0
我第一次尝试在到期前 5 秒内续订,例如在初始订阅后的第 55 秒。第二次尝试:在第 45 秒,但效果相同。
我还尝试在订阅请求中使用 HTTP/1.1(并添加“Connection:close”标头),但没有效果。
我做错了什么?
UPD1将模板更新到 1.37WW 没有任何改变
UPD2
当我在订阅后立即尝试续订订阅时,它可以工作。等待 750 毫秒并更新 - 有效。等待 900 毫秒并更新 - HTTP 412 失败。似乎 D-Link 设备中存在错误(另一个 D-Link 路由器 DI-624 以相同的方式工作)。英特尔设备验证器(https://software.intel.com/en-us/articles/intel-tools-for-upnp-technologies)验证 DIR-655 和 DI-624 事件没有错误,但是,我认为,没有在订阅和续订步骤之间暂停。所以,我认为,UPNP 事件不是一种可靠的机制,最好不要使用它。
这种设备行为损害了 upnp 事件机制的想法。