SIPお勉強 その7
あいかわらずちょこちょことgithubのSIPのソースコードは更新しています。RFCも並行して読んでいるが、SIPは意味が重複しているように見えるヘッダが多く使い分けがよくわからない...。
ToフィールドとRequest-URIの違い
どちらも「宛先」という意味では同じだが、RFC3261によるとどう違うのだろうか?一応Toヘッダのスキーマを認識できない場合と、Request-URIのスキーマを認識できない場合の挙動は、それぞれ別に定義されているが、それ以外がよくわからない。
Toヘッダフィールド
- Toヘッダーフィールドは、Fromフィールドで特定されるユーザーが指定した、リクエストのオリジナル受信者を特定する。
- コール転送(forward)、または他のプロキシによる処理があるため、オリジナル受信者がリクエストを処理するUASかどうかわからない。UASは、ToフィールドがそのUASと同一でないときにリクエストを受け取るかどうか決定するために、それが望むどのようなポリシーでも適用してもよい[MAY]。
ようするに送信者の指定したリクエストの宛先と、実際にそのリクエストを処理するUASは一般に異なる。UASの動作としては、Toフィールドが自身と一致しない場合にそのリクエストをどう処理するかは任意。
Request-URI
- 一方、Request-URIはリクエストを処理するUASを特定する。
正直この1文だけだとなんだかよくわからないが、「リクエストのRequest-URIが、以前にこのプロキシがRecord-Routeヘッダーフィールドに置いた値を含んでいる場合(セクション16.6の項目4参照)、プロキシはリクエストのRequest-URIをRouteヘッダーフィールドの最後の値に置き換えて、Routeヘッダーフィールドからその値を削除しなければならない[MUST]。」(16.4 ルート情報の前処理)という記載が存在することから、最初Toヘッダフィールドの値とRequest-URIの値は一致しているが、プロキシサーバの転送の途中でRequest-URIの値が書き換えられることがあるらしいが、Toヘッダフィールドはそれがない、ということだと思う。
実際RF3261に「プロキシは、転送(forward)を行う間にだけリクエストのRequest-URIを(プロキシがそのURIに対して責任を負う場合)変更できる。(16.5)」という記述があった。