Subject: Re: Diff. between branch and tag

From: Igor Slepchin <[email-masked]>
Date: Thu, 24 Feb 2000 00:24:00 -0500

Tags are inserted by UASs, not proxies, and are needed to allow UAC to
distinguish multiple 200 OK responses sent by several UASs in respponse
to a forked request or, equivalently, to distinguish multiple instances
of a user identified by the URL in the request URI of original request.
Tags are _not_ used to match responses to forked requests at the
proxies.

Steve Little wrote:
> Ive have seem implementations insert a tag field
> irrespective of whether it forks or not.

UAS has no reliable way of determining if the request has been forked or
not. Thus, to be safe it almost needs to add a tag. Proxies only insert
tags into the final responses they generate themselves; they never
insert tags into requests or responses they forward.

> Also, if forking proxies insert tags while forwarding
> the request, then isnt that enough ? Then when a
> receiving entity gets the request, it responds and
> copies the tag in it. 

Since a request can be forked several times on its way to UAS, a single
"tag" (or whatever you like to call it) added to the request by one of
the proxies is not sufficient for the next forking proxy along the chain
to match responses on its own branches; every proxy that forked the
request would need to add its own unique IDs to the branches it created.
This is precisely what's being achieved by branch parameter in Via
header.

> why should a reciever try and figure out if
> its forked ? 

It should not and, moreover, cannot (I assume a receiver here means
UAS). Instead, it should always add tags to all responses it generates.

---
Igor Slepchin

---

From: Steve Little <[email-masked]>
Date: Wed, 23 Feb 2000 20:29:50 -0800 (PST)

Hi,
Ive have seem implementations insert a tag field
irrespective of whether it forks or not.
Also, if forking proxies insert tags while forwarding
the request, then isnt that enough ? Then when a
receiving entity gets the request, it responds and
copies the tag in it. That way requests can be matched
wth responses, and the generation of tags can be the
rsponsibility of the entity that actually forks a
request - why should a reciever try and figure out if
its forked ? Isnt it simpler for the sender to do it ?

Thx

--- Igor Slepchin <[email-masked]> wrote:
> Branch IDs allow proxies to match responses to
> forked requests. Without
> them, a proxy wouldn't be able to tell which branch
> a response
> corresponds to. Tags are of no help here since they
> are not known until
> responses arrive.
> 
> ---
> Igor Slepchin
> 
> 
> Steve Little wrote:
> > 
> > Hi,
> > What is the difference between inserting a branch
> > param in a Via and a tag in To, From headers ?
> > Dont both uniquely identify req-resp for forking
> > proxies ?
> > 
> > Thx
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Talk to your friends online with Yahoo! Messenger.
> > http://im.yahoo.com
> 
__________________________________________________
Do You Yahoo!?
Talk to your friends online with Yahoo! Messenger.
http://im.yahoo.com

---

From: Jonathan Rosenberg <[email-masked]>
Date: Tue, 29 Feb 2000 01:11:55 -0500

> irrespective of whether it forks or not.

Only a UAS inserts a tag. It has no way of knowing whether the request
forked or not. The only thing you know is that if there is a single Via
in the request when it arrives at the UAS, it didn't fork. Thats why the
spec doesn't mandate tags in this (mostly useless) case. I think its a
good idea (and probably should be a MUST) to insert a tag always.

> receiving entity gets the request, it responds and

No, proxies can't insert tags. Tags go in the To field, and there is
only one that can be placed there. If the first forking proxy inserts a
tag in the To field, as you suggest, and then it forks downstream, the
second proxy can't insert a tag, since there already is one there. So,
it leaves it alone. All user agents downstream of the second forking
proxy that respond will do so with the same tag. That defeats the whole
purpose.

> That way requests can be matched
> wth responses,

This doesn't allow requests to be matched with responses in proxies.
*EACH* forking proxy needs to insert some kind of data. There is only
room for one tag in the To field. Thats why we use the Via header for
the branch parameter - each proxy can get its own.

> and the generation of tags can be the

As I said, it can't, shouldn't, and doesn't have to.

-Jonathan R.

-- 
Jonathan D. Rosenberg                       200 Executive Drive
Chief Scientist                             Suite 120 
dynamicsoft                                 West Orange, NJ 07052
[email-masked]                     FAX:   (732) 741-4778
http://www.cs.columbia.edu/~jdrosen         PHONE: (732) 741-7244
http://www.dynamicsoft.com