SIP - 请求和响应标头字段


Accept

Accept 头字段用于指示消息正文中可接受的消息 Internet 媒体类型。

  • 标头字段使用互联网中常用的格式类型/子类型来描述媒体类型。

  • 如果不存在,则假定可接受的消息正文格式为 application/sdp

  • 媒体类型列表可以使用 q 值参数设置首选项。

Accept-Encoding

Accept-Encoding 头字段用于指定可接受的消息体编码方案。

  • 编码可用于确保具有较大消息正文的 SIP 消息适合单个 UDP 数据报。

  • 使用q值参数可以设置首选项。 如果列出的方案均不为 UAC 所接受,则返回 406 Not Acceptable 响应。 如果不包含,则假定的编码将为 text/plain

To

To 表示请求的最终收件人。 UA 生成的任何响应都将包含此标头字段并添加一个标签。 这是一个强制性的标头。

  • 代理生成的任何响应都必须在 To 标头字段中添加一个标记。

  • To 标头字段 URI 永远不会用于路由。

From

From 标头字段指示请求的发起者。 它是用于标识对话的两个地址之一。

  • From 标头字段可能包含用于标识特定调用的标记。

  • 它可能包含显示名称,在这种情况下,URI 包含在 <> 中。

  • 这是一个强制标头。

Call-ID

Call-ID 标头字段在所有 SIP 请求和响应中都是必需的。 它用于唯一标识两个用户代理之间的呼叫。

  • Call-ID 在各个调用中必须是唯一的。

  • 用户代理的所有注册都应使用相同的 Call-ID。

  • Call-ID 始终由用户代理创建,并且永远不会被服务器修改。

  • 它是一个加密随机标识符。

Via

Via 用于记录请求所采用的 SIP 路由,这有助于将响应路由回发起者。

  • 产生请求的UA将自己的地址记录在Via头字段中。

  • 转发请求的代理将包含其自身地址的 Via 标头字段添加到 Via 标头字段列表的顶部。

  • 生成请求响应的代理或 UA 将请求中的所有 Via 标头字段按顺序复制到响应中,然后将响应发送到顶部 Via 标头字段中指定的地址。

  • 接收响应的代理检查顶部的 Via 标头字段并匹配其自己的地址。

  • 如果不匹配,则响应被丢弃。

  • 然后删除顶部的 Via 标头字段,并将响应转发到下一个 Via 标头字段中指定的地址。

  • Via 标头字段包含协议名称、版本号和传输(SIP/2.0/UDP、SIP/2.0/TCP 等),并且可能包含端口号和参数,例如received、rport、branch、maddr 和 ttl

  • 如果 UA 或代理从与顶部 Via 标头字段中指定的地址不同的地址接收到请求,则 received 标记将添加到 Via 标头字段中。

    < /里>
  • 分支参数由 UA 和代理添加到 Via 标头字段中,该参数被计算为 Request-URI、To、From、Call-ID 和 CSeq 编号的哈希函数。

CSeq

CSeq 头字段是每个请求中必需的头字段。 它包含一个十进制数字,该数字随着每个请求而增加。

  • 通常,每个新请求都会增加 1,CANCELACK 请求除外,它使用它引用的 INVITE 请求的 CSeq 编号。

  • UAS 使用 CSeq 计数来确定失序请求或区分新请求(不同的 CSeq)或重传(相同的 CSeq)。

  • UAC 使用 CSeq 标头字段来将响应与其引用的请求相匹配。

  • 例如,发送 INVITE 请求然后发送 CANCEL 请求的 UAC 可以通过 200 OK 响应的 CSeq 中的方法判断它是对邀请还是取消请求的响应。

Contact

Contact 头字段用于向其他用户传达请求发起者的地址。 一旦收到 Contact 标头字段,URI 就可以被缓存并用于在对话框中路由未来的请求。

例如,对 INVITE 的 200 OK 响应中的 Contact 标头字段可以允许确认 ACK 消息以及此呼叫期间的所有未来请求绕过代理并直接发送至被叫方。

Record-Route

Record-Route 标头字段用于强制通过代理为两个 UA 之间的会话(对话)中的所有后续请求进行路由。

通常,Contact头字段的存在允许UA绕过初始请求中使用的代理链直接发送消息。

  • 将其地址插入 Record-Route 标头字段的代理会覆盖这一点,并强制将来的请求包含一个 Route 标头字段,该 Route 标头字段包含强制包含此代理的代理地址。

  • 希望实现此功能的代理会插入包含其自己 URI 的标头字段,或将其 URI 添加到已存在的 Record-Route 标头字段中。

  • 构造 URI 以便 URI 解析回代理服务器。 UAS 将 Record-Route 头字段复制到对请求的 200 OK 响应中。

  • 标头字段由代理原封不动地转发回 UAC。 然后,UAC 存储 Record-Route 代理列表以及 Contact 标头字段(如果存在于 200 OK 中),以便在所有后续请求的 Route 标头字段中使用。

Organization

Organization头字段用于指示消息的发起者所属的组织。

  • 当消息从一个组织传递到另一个组织时,它也可以由代理插入。

  • 与所有 SIP 标头字段一样,代理可以使用它来做出路由决策,UA 也可以使用它来做出呼叫筛选决策。

Retry-After

它用于指示资源或服务何时可以再次可用。

  • 在 503 Service Unavailable 响应中,它指示服务器何时可用。

  • 在 404 Not Found、600 Busy Everywhere 和 603 Decline 响应中,指示被叫 UA 何时可能再次可用。

  • 它包含以"秒"为单位的时间段。

Subject

可选的Subject头字段用于指示媒体会话的主题。

标题字段的内容也可以在提醒期间显示,以帮助用户决定是否接受呼叫。

示例:
Subject: How are you?

Supported

Supported 头字段用于列出 A 或服务器实现的一个或多个选项。

  • 它通常包含在对 OPTIONS 请求的响应中。

  • 如果未实现任何选项,则不包含标头字段。

  • 如果 UAC 在"Supported"标头字段中列出了一个选项,代理或 UAS 可以在调用期间使用该选项。

  • 如果必须使用或支持该选项,则使用 Require 标头字段。

示例:
Supported: rel100

Expires

Expires头字段用于指示请求或消息内容有效的时间间隔。

  • 当出现在 INVITE 请求中时,标头字段会设置完成 INVITE 请求的时间限制。

  • 也就是说,UAC 必须在该时间段内收到最终响应(非 1xx),否则 INVITE 请求将自动取消并返回 408 请求超时响应。

  • 一旦建立会话,原始 INVITE 中的 Expires 标头字段的值就不起作用 — Session-Expires 标头字段必须用于此目的。

  • 如果出现在 REGISTER 请求中,则标头字段会设置联系人标头字段中不包含 expires 参数的 URI 的时间限制。

  • Expires 也用于 SUBSCRIBE 请求中以指示订阅持续时间。

示例:
Expires: 30

User-Agent

此标头字段用于传达有关发起请求的 UA 的信息。

session_initiation_protocol_headers.html