下面是RFC 3455 对P-Associated-URI header的概述(纯翻译+简单解释)。
为了允许registrar返回已注册address-of-record的一组关联 URI,就定义了P-Associated-URI header field,用在REGISTER request的 200 OK response中。
P-Associated-URI header field会将关联URI set传输到注册的address-of-record。关联的URI是服务提供商分配给用户供其自己使用的URI。
网络侧会将address-of-record URI 与零个或多个 URI 相关联。 通常,所有这些 URI(address-of-record URI 和关联的 URI)都被分配给特定用户使用。
那什么是Address-of-Record,根据RFC3261中的描述,AOR是一个SIP/SIPS URI,是user的public address,一般就是Public use id。
P-Associated-URI header的使用:registrar会将 P-Associated-URI header field插入到 REGISTER request的 200 OK response中。该header field值由包含零个或多个与address-of-record关联的 URI list 。
如果registrar支持P-Associated-URI header,那么registrar必须始终在 REGISTER request的所有 200 OK response中插入P-Associated-URI header field,无论 REGISTER 是否是initial registration、re-registration或de-registration,无论是否有零个或多个关联的URI。
紧接着看下网络侧和UA侧对这个header的处理
网络侧行为:
registrar:接收并授权 REGISTER request的registrar可以将零个或多个URI 与address-of-record相关联。支持RFC 3455的registrar必须在 REGISTER request的 200 OK response中包含P-Associated-URI header field,而此header必须填充以逗号分隔的 SIP 或 SIPS URI list,这就表示这些URI list是与注册中的address-of-record相关联的。如果注册中的address-of-record没有关联任何其他SIP或SIPS URI,则registrar必须包含一个空的P-Associated-URI header value。
UA侧行为
UAC 可以接收REGISTER的 200 OK response中的 P-Associated-URI header field。 REGISTER request的 200 OK response中 header field的存在意味着registrar支持该扩展。该P-Associated-URI header 会包含零个或多个与address-of-record URI 关联的 URI 的list。 然后UAC可以使用任何关联的URI来填充From header或在后续请求中用于在其他SIP header中提供主叫方身份信息。
UAC可以检查关联的URI是否已注册。例如,可以将要检查的URI填充到REGISTER的To header 中来进行此检查,此时并且不需要Contact header;之后200 OK response将包含一个 Contact header,其中包会含已注册的contact addresses的list;这时200 OK response的Contact header field可能包含具有零个或多个值,而零就表示address-of-record未注册。
结合 IMS 中的Implicit Registration-CSDN博客 中的内容,相信到这里,P-Associated-URI header的含义和用法已经很清楚了。
Implicit Registration中的例子,直接copy过来,帮助理解。
上面是电信网络下IMS over LTE时,返回的SIP URI 和tel URI。
例如上图是在移动网络下IMS over NR注册时,REGISTER 的200 ok中的P-Associate-URI,其中带了两个SIP uri,代表与注册的public use ID(IMPU)相关联,此后就可以用这些SIP uri来填充From header或在后续呼叫流程中用于在SIP header中提供主叫方身份信息等。