4

デバイスで UPnP イベント サブスクリプションを更新しようとすると、412 HTTP エラー: Precondition Failed, bad SID が発生します。

このエラーは 1 つのデバイスでのみ発生し、他のすべてのデバイスは正常に動作します。バギーデバイスはD-Link XTreme N GIGABIT Router DIR-655 (Firmware Version:1.34WW, 2010/09/30), H/w ver: 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 秒後にサブスクリプションを更新しようとしました。2 回目の試行: 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 イベント メカニズムのアイデアを危うくします。

4

1 に答える 1

0

いくつかの Belkin WeMo デバイスで非常によく似た問題に遭遇しました。

CALLBACK URL に送信された通知メッセージに適切に応答するようにして、問題を解決しました。HTTP 200 応答を送信したところ、正常に動作するようになりました。

于 2015-11-01T12:51:01.300 に答える