Добавление значения в заголовок Via |
|
Прокси-сервер должен добавить значение в заголовок Via копии перед уже существующими значениями. Это подразумевает, что прокси-сервер подсчитает параметр «branch» для этой ветви, который будет уникальным для данной сети и будет содержать необходимую комбинацию «magic cookie». Прокси-серверы, конфигурированные таким образом, чтобы обнаруживать петли, имеют дополнительное ограничение значения, которое они используют для формирования параметра «branch». Такой прокси-сервер в реализации должен создавать параметр «branch», разделенный на две части. Первая часть должна удовлетворять требованиям, описанным в 2.2.1, вторая - служит для того, чтобы отличать спирали от петель. Обнаружение петель производится путем проверки изменения полей, влияющих на обработку вернувшегося на прокси-сервер запроса (если изменений нет, то замкнутый маршрут присутствует). Значение, помещенное во вторую часть параметра «branch», должно отражать все эти поля (включая поля заголовков Route, Proxy-Require и Proxy-Authorization). Это гарантирует, что если запрос был маршрутизирован обратно на прокси-сервер и одно из полей изменилось, он расценивается как прошедший по спирали, а не по петле. Общепринятый способ создания этого значения - подсчет криптографической контрольной суммы по алгоритму хэширования параметров «tag» заголовков То и From, заголовка Call-ID, поля Request-URI полученного запроса (перед преобразованием), верхнего заголовка Via и порядкового номера из заголовка Cseq. При подсчете контрольной суммы могут также учитываться значения заголовков Proxy-Require и Proxy-Authorization (в случае их присутствия). Алгоритм хэширования, используемый для подсчета контрольной суммы, зависит от реализации, но предпочтительным является алгоритм MD5, формирующий строку в шестнадцатерич-ном виде. Если прокси-сервер хочет обнаруживать петли, параметр «branch», который он добавляет, должен зависеть от всей информации, влияющей на обработку запроса, включая поле Request-URI (во входящем запросе) и любые заголовки, влияющие на прием запроса или маршрутизацию. Это необходимо для того, чтобы отличить запросы с петлей от запросов, чьи параметры маршрутизации изменились перед возвращением на этот сервер (запросы, проходящие по спирали). Тип запроса не должен использоваться при подсчете параметра «branch»-В частности, запрос CANCEL и запрос АСК на ответ, отличный от класса 2хх, имеютте же значения параметра, что и соответствующий запрос, который они отменяют или подтверждают. Параметр «branch» используется при корреляции этих запросов на сервере, обеспечивающем их обработку. |

