The Reason Header Field for the Session Initiation Protocol (SIP)
updated by
Extracted elements (13)
The Reason header field is intended to resolve the Heterogeneous Error Response Forking Problem (HERFP): when an INVITE forks and one branch rejects, the error response may never reach the client unless all branches reject. Encapsulating the final error in a provisional response via Reason solves this.
The Reason header field is noted to be most useful initially for BYE and CANCEL requests, since responses already carry status codes and reason phrases that provide sufficient information without needing the Reason header.
Third party call controllers and PSTN gateways generate SIP requests in response to events from other dialogs or non-SIP protocols; the Reason header allows the receiving client to know what triggered the SIP request, enabling better service logic and UI behavior.
For ISUP interworking, a PSTN gateway may include a Q.850 cause value (e.g., cause=16 for Normal Call Clearing) in the Reason header of a CANCEL request triggered by receipt of a REL message from the ISUP side.
When a client receives an unacceptable offer in a 200 OK response to an empty INVITE, it should send ACK followed by BYE with Reason: SIP ;cause=488 to communicate why the session is being terminated immediately after establishment.
A SIP message MAY contain more than one Reason value (multiple Reason lines), but all of them MUST have different protocol values (e.g., one SIP and another Q.850).
Any SIP status code MAY appear in the Reason header field of a request. An implementation is free to ignore Reason values that it does not understand.
Proxies generating a CANCEL request upon reception of a CANCEL from the previous hop that contains a Reason header field SHOULD copy it into the new CANCEL request.
The Reason header field conveys why a SIP request was issued. It MAY appear in any request within a dialog, in any CANCEL request, and in any response whose status code explicitly allows it. Clients and servers are free to ignore it; it has no impact on protocol processing.
The 'SIP' protocol value in the Reason header field indicates that the cause parameter contains a SIP status code. The 'Q.850' protocol value indicates the cause parameter contains an ITU-T Q.850 cause value in decimal representation.
This document defines a new IANA sub-registry under the SIP parameters registry labeled 'Reason Protocols'. Initial entries are: SIP (cause=status code, ref RFC 3261) and Q.850 (cause=ITU-T Q.850 cause value in decimal). New protocol values MUST refer to an ITU-T Recommendation, IETF protocol name, or recognized protocol identifier.
Spoofing or removing the Reason header field in a HERFP scenario can prevent a client from properly updating its previous request, making session establishment impossible. It is RECOMMENDED that the Reason header field be protected by a suitable integrity mechanism.
The Reason header field syntax: 'Reason = "Reason" HCOLON reason-value *(COMMA reason-value)' where reason-value contains a protocol token (SIP, Q.850, or other) followed by optional cause parameter (decimal digits) and optional text parameter (quoted-string).