<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc-ext parse-xml-in-artwork="yes"?>
<?rfc-ext allow-markup-in-artwork="yes"?>
<?rfc-ext authors-section="end" ?>
<?rfc-ext sec-no-trailing-dots="yes" ?>
<?rfc-ext html-pretty-print="prettyprint https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"?>

<!DOCTYPE rfc [
  <!ENTITY MAY "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MAY</bcp14>">
  <!ENTITY MUST "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MUST</bcp14>">
  <!ENTITY MUST-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MUST NOT</bcp14>">
  <!ENTITY OPTIONAL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>OPTIONAL</bcp14>">
  <!ENTITY RECOMMENDED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>RECOMMENDED</bcp14>">
  <!ENTITY REQUIRED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>REQUIRED</bcp14>">
  <!ENTITY SHALL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHALL</bcp14>">
  <!ENTITY SHALL-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHALL NOT</bcp14>">
  <!ENTITY SHOULD "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHOULD</bcp14>">
  <!ENTITY SHOULD-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHOULD NOT</bcp14>">
]>
<rfc number="4437" category="exp" xmlns:x="http://purl.org/net/xml2rfc/ext" xmlns:grddl='http://www.w3.org/2003/g/data-view#' grddl:transformation='rfc2629grddl.xslt'>
  <front>
    <title abbrev="WebDAV Redirect Reference Resources">Web Distributed Authoring and Versioning (WebDAV) Redirect&#160;Reference&#160;Resources</title>
    <author initials="J." surname="Whitehead" fullname="Jim Whitehead">
      <organization abbrev="U.C. Santa Cruz">UC Santa Cruz, Dept. of Computer Science</organization>
      <address>
        <postal>
          <street>1156 High Street</street>
          <city>Santa Cruz</city>
          <region>CA</region>
          <code>95064</code>
          <country>US</country>
        </postal>
        <email>ejw@cse.ucsc.edu</email>
      </address>
    </author>
    <author initials="G." surname="Clemm" fullname="Geoff Clemm">
      <organization>IBM</organization>
      <address>
        <postal>
          <street>20 Maguire Road</street>
          <city>Lexington</city><region>MA</region><code>02421</code>
          <country>US</country>
        </postal>
        <email>geoffrey.clemm@us.ibm.com</email>
      </address>
    </author>
    <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
      <organization abbrev="greenbytes">greenbytes GmbH</organization>
      <address>
        <postal>
          <street>Hafenweg 16</street>
          <city>Muenster</city><region>NW</region><code>48155</code>
          <country>Germany</country>
        </postal>
        <phone>+49 251 2807760</phone>
        <facsimile>+49 251 2807761</facsimile>
       <email>julian.reschke@greenbytes.de</email>
        <uri>http://greenbytes.de/tech/webdav/</uri>
      </address>
    </author>

    <date month="March" year="2006"/>
    <workgroup>WEBDAV Working Group</workgroup>

    
    <abstract>
<t>

   This specification defines an extension to Web Distributed Authoring
   and Versioning (WebDAV) to allow clients to author HTTP redirect
   reference resources whose default response is an HTTP/1.1 3xx
   (Redirection) status code.  A redirect reference makes it possible to
   access the target resourced indirectly through any URI mapped to the
   redirect reference resource.  This specification does not address
   remapping of trees of resources or regular expression based
   redirections.  There are no integrity guarantees associated with
   redirect reference resources.  Other mechanisms can also be used to
   achieve the same functionality as this specification.  This
   specification allows operators to experiment with this mechanism and
   develop experience on what is the best approach to the problem.

</t>
</abstract>



</front>

	<middle>


<section title="Introduction">
<t>
  This specification extends the Web Distributed Authoring Protocol (WebDAV) 
  to enable clients to create new access paths to existing resources.  This
  capability is useful for several reasons.
</t>
<t>
  WebDAV makes it possible to organize HTTP resources into 
  hierarchies, placing them into groupings, known as collections, that 
  are more easily browsed and manipulated than a single flat collection.  However,
  hierarchies require categorization decisions that locate 
  resources at a single location in the hierarchy, a drawback when a 
  resource has multiple valid categories.  For example, in a hierarchy of 
  vehicle descriptions containing collections for cars and boats, a 
  description of a combination car/boat vehicle could belong in either 
  collection.  Ideally, the description should be accessible from both. 
  Allowing clients to create new URIs that access the existing resource 
  lets them put that resource into multiple collections.
</t>
<t>
  Hierarchies also make resource sharing more difficult, since resources 
  that have utility across many collections are still forced into a single 
  collection.  For example, the mathematics department at one university 
  might create a collection of information on fractals that contains 
  bindings to some local resources, but also provides access to some 
  resources at other universities.  For many reasons, it may be 
  undesirable to make physical copies of the shared resources: to conserve disk space, to respect copyright constraints, or to 
  make any changes in the shared resources visible automatically.  Being 
  able to create new access paths to existing resources in other 
  collections or even on other unrelated systems is useful for this sort of case.
</t>
<t>
  The redirect reference resources defined here provide a mechanism for 
  creating alternative access paths to existing resources.  A redirect 
  reference resource is a resource in one collection whose purpose is to 
  redirect requests to another resource (its target), possibly in a 
  different collection.  In this way, it allows clients to submit requests 
  to the target resource from another collection.  It redirects most 
  requests to the target resource using an HTTP status code from the 3xx range (Redirection), 
  thereby providing a form of mediated access to the target resource.
</t>
<t>
  A redirect reference is a resource with properties but with no body of its own.  Properties
  of a redirect reference resource can contain information such as who created
  the reference, when, and why.  Since redirect reference resources are
  implemented using HTTP 3xx responses, it generally takes two round trips to
  submit a request to the intended resource.  Redirect references work equally well for local 
  resources and for resources that reside on a different system from the 
  reference.
</t>
<t>
  The remainder of this document is structured as follows: <xref target="terminology"/>
  defines terms that will be used throughout the specification.  <xref target="overview"/>
  provides an overview of redirect reference resources.    <xref target="operations.on.redirect.reference.resources"/>
  defines the semantics of existing methods when applied to redirect 
  reference resources.  <xref target="METHOD_MKREDIRECTREF"/>
  discusses how to create a redirect reference resource, and <xref target="METHOD_UPDATEREDIRECTREF"/> 
  discusses updating redirect references.  <xref target="operations.on.collections.that.contain.redirect.reference.resources"/> discusses their semantics when 
  applied to collections that contain redirect reference resources.   
  Sections <xref target="operations.on.targets.of.redirect.reference.resources" format="counter"/>
  through <xref target="redirect.references.to.collections" format="counter"/> discuss several other issues raised by the 
  existence of redirect reference resources.  Sections <xref target="headers" format="counter"/> through
  <xref target="extensions.to.response.element" format="counter"/> 
  define the new headers, properties, and XML elements required to support 
  redirect reference resources.  Section <xref target="capability.discovery" format="counter"/> discusses capability 
  discovery.  Sections <xref target="security.considerations" format="counter"/>
  through <xref target="iana.considerations" format="counter"/> present the security, 
  internationalization, and IANA concerns raised by this specification.  
  The remaining sections provide a variety of supporting information.
</t>
</section>
    

<section title="Notational Conventions">
<t>
  Since this document describes a set of extensions to the WebDAV 
  Distributed Authoring Protocol <xref target="RFC2518"/>, itself an extension to the 
  HTTP/1.1 protocol, the augmented BNF used here to describe protocol 
  elements is exactly the same as described in <xref target="RFC2616" x:fmt="of" x:sec="2.1"/>.  Since
  this augmented BNF uses the basic production rules provided in 
  <xref target="RFC2616" x:fmt="of" x:sec="2.2"/>, these rules apply to this document as well.
</t>
<t>
  In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
  "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in <xref target="RFC2119"/>.
</t>
</section>



<section title="Terminology" anchor="terminology">
<t>
  The terminology used here follows and extends that in the WebDAV 
  Distributed Authoring Protocol specification <xref target="RFC2518"/>.  Definitions of 
  the terms <x:dfn>resource</x:dfn>, <x:dfn>Uniform Resource Identifier</x:dfn> (<x:dfn>URI</x:dfn>), and <x:dfn>Uniform 
  Resource Locator</x:dfn> (<x:dfn>URL</x:dfn>) are provided in <xref target="RFC3986"/>.
</t>
<t>
  <iref item="Redirect Reference Resource"/>
  <x:dfn>Redirect Reference Resource</x:dfn>
  <list><t>
    A resource created to redirect all requests made to it, using 
    an HTTP status code from the 3xx range, to a defined target resource.
  </t></list>
</t>
<t>
  <iref item="Non-Reference Resource"/>
  <x:dfn>Non-Reference Resource</x:dfn>
  <list><t>
   A resource that is not a reference to another resource.</t>
  </list>
</t>
<t>
  <iref item="Target Resource"/>
  <x:dfn>Target Resource</x:dfn>
  <list><t>
   The resource to which requests are 
   redirected by a redirect reference 
   resource.  A target resource can be anything that can be identified by an absolute URI
   (see 
   <xref target="RFC3986"/>, "absolute-URI").
   </t>
  </list>
</t>
<t>
  This document uses the terms "<x:dfn>precondition</x:dfn>", "<x:dfn>postcondition</x:dfn>", and "<x:dfn>protected property</x:dfn>" as defined in
  <xref target="RFC3253"/>.  Servers &MUST; report pre-/postcondition failures
  as described in <xref target="RFC3253" x:fmt="sec" x:sec="1.6"/> of this document.
</t>

</section>

<section title="Overview of Redirect Reference Resources" anchor="overview">
<t>
  For all operations submitted to a redirect reference resource, the 
  default response is a 302 (Found), accompanied by the Redirect-Ref 
  header (defined in <xref target="header.redirect-ref"/>, below) and the Location header 
  (<xref target="RFC2616" x:fmt="," x:sec="14.30"/>) set to 
  the URI of the target resource.  With this information, the client can 
  resubmit the request to the URI of the target resource.
</t>
<t>
  A redirect reference resource never automatically forwards requests to 
  its target resource.  Redirect resources bring the same benefits as links
  in HTML documents.  They can be created and maintained without the
  involvement or even knowledge of their target resource.  This reduces the
  cost of linking between resources.
</t>
<t>
  If the client is aware that it is operating on a redirect reference 
  resource, it can resolve the reference by retrieving the reference 
  resource's DAV:reftarget property (defined in <xref target="reftarget.property"/>, below), whose 
  value contains the URI of the target resource.  It can then submit 
  requests to the target resource. 
</t>
<t>
  A redirect reference resource is a new type of resource.  To distinguish 
  redirect reference resources from non-reference resources, a new value 
  of the DAV:resourcetype property (defined in <xref target="RFC2518"/>), DAV:redirectref, 
  is defined in <xref target="redirectref.xml.element"/>, below.
</t>
<t>
  Since a redirect reference resource is a resource, methods can be applied to the reference 
  resource as well as to its target resource.  The Apply-To-Redirect-Ref 
  request header (defined in <xref target="header.apply-to-redirect-ref"/>, below) is provided so that 
  referencing-aware clients can control whether an operation is applied to 
  the redirect reference resource or 
  standard HTTP/WebDAV behaviour (redirection with a 3xx status code)
  should occur.  The Apply-To-Redirect-Ref
  header can be used with most requests to redirect 
  reference resources.  This header is particularly useful with PROPFIND, 
  to retrieve the reference resource's own properties.
</t>
<t>
  <x:h>Implementation Note:</x:h> Operations on the target of a redirect reference
  usually do not affect the redirect reference itself.  However, clients 
  should not rely on this behaviour (for instance, some servers may
  update redirect references as a result of namespace operations on the
  reference's target).
</t>
</section>

<section title="Operations on Redirect Reference Resources" anchor="operations.on.redirect.reference.resources">
<t>
  Although non-referencing-aware clients cannot create reference 
  resources, they should be able to submit requests through the reference 
  resources created by reference-aware WebDAV clients.  They should be 
  able to follow any references to their targets.  To make this possible, 
  a server that receives any request made via a redirect reference 
  resource &MUST; return a 3xx range (Redirection) status code, unless the request 
  includes an Apply-To-Redirect-Ref header specifying "T".  The client and server &MUST; 
  follow <xref target="RFC2616" x:fmt="," x:sec="10.3"/>, but with these additional 
  rules: 
</t>
<t>
<list style="symbols">
<t>
  The Location response header &MUST; contain a 
  URI (see <xref target="RFC3986" x:fmt="," x:sec="3"/>) that 
  identifies the target of the reference resource.
</t>
<t>
  The response &MUST; include the Redirect-Ref header.  This header 
  allows reference-aware WebDAV clients to recognize the resource as a 
  reference resource and to understand the reason for the redirection.
</t>
</list>
</t>
<t>
  A reference-aware WebDAV client can, like a non-referencing client, resubmit the request to 
  the URI in the Location header in order to operate on the target 
  resource.  Alternatively, it can resubmit the request to the URI of the 
  redirect reference resource with the "Apply-To-Redirect-Ref: T" header in 
  order to operate on the reference resource itself.  In this case, the request &MUST; be applied to the 
  reference resource itself, and a 3xx response &MUST-NOT; be returned.
</t>
<t>
  As redirect references do not have bodies, GET and PUT requests with
  "Apply-To-Redirect-Ref: T" &MUST; fail with status 403 (forbidden).
</t>
</section>


<section title="MKREDIRECTREF Method" anchor="METHOD_MKREDIRECTREF">
<iref item="MKREDIRECTREF method" primary="true"/>
<iref item="Methods" subitem="MKREDIRECTREF" primary="true"/>
<t>
  The MKREDIRECTREF method requests the creation of a redirect reference resource. 
</t>
<t>
  If a MKREDIRECTREF request fails, the server state preceding the request &MUST; be restored. 
</t>
<t>
  Responses from a MKREDIRECTREF request &MUST-NOT; be cached, as MKREDIRECTREF
  has non-idempotent and non-safe semantics 
  (see <xref target="RFC2616" x:fmt="," x:sec="9.1"/>).  
</t>
<t>
  <iref item="MKREDIRECTREF method" subitem="Marshalling" primary="true"/>
  <x:h>Marshalling</x:h>
  <list>
    <t>The request body &MUST; be a DAV:mkredirectref XML element.
      <figure><artwork type="application/xml-dtd">
<iref item="XML elements" subitem="DAV:mkdirectref" primary="true"/><iref item="DAV:mkdirectref XML element" primary="true"/>   &lt;!ELEMENT mkredirectref (reftarget, redirect-lifetime?)&gt;
<iref item="XML elements" subitem="DAV:reftarget" primary="true"/><iref item="DAV:reftarget XML element" primary="true"/>   &lt;!ELEMENT reftarget (href)&gt;
<iref item="XML elements" subitem="DAV:redirect-lifetime" primary="true"/><iref item="DAV:redirect-lifetime XML element" primary="true"/>   &lt;!ELEMENT redirect-lifetime (permanent | temporary)&gt;
<iref item="XML elements" subitem="DAV:permanent" primary="true"/><iref item="DAV:permanent XML element" primary="true"/>   &lt;!ELEMENT permanent EMPTY&gt;
<iref item="XML elements" subitem="DAV:temporary" primary="true"/><iref item="DAV:temporary XML element" primary="true"/>   &lt;!ELEMENT temporary EMPTY&gt;</artwork></figure>
    </t>
    <t>
      The DAV:href element is defined in <xref target="RFC2518" x:fmt="()" x:sec="12.3"/>
      and &MUST; contain either a 
      URI or a relative-ref (see <xref target="RFC3986"/>, Sections <xref target="RFC3986" x:fmt="number" x:sec="3"/> and <xref target="RFC3986" x:fmt="number" x:sec="4.2"/>).
    </t>
    <t>
      If no DAV:redirect-lifetime element is specified, the server &MUST; behave
      as if a value of DAV:temporary was specified.
    </t>
    <t> 
      If the request succeeds, the server &MUST; return 201 (Created) status.
    </t>
    <t>
      If a response body for a successful request is included, it &MUST; be a
      DAV:mkredirectref-response XML element.  Note that this document does not define
      any elements for the MKREDIRECTREF response body, but the DAV:mkredirectref-response
      element is defined to ensure interoperability between future extensions
      that do define elements for the response body.
      <figure><artwork type="application/xml-dtd">
<iref item="XML elements" subitem="DAV:mkredirectref-response" primary="true"/><iref item="DAV:mkredirectref-response XML element" primary="true"/>   &lt;!ELEMENT mkredirectref-response ANY&gt;</artwork></figure>
    </t>
  </list>
</t>
<t>
  <iref item="MKREDIRECTREF method" subitem="Preconditions" primary="true"/>
  <x:h>Preconditions</x:h>
  <list>
    <t>
      <iref item="Condition Names" subitem="DAV:resource-must-be-null (pre)" primary="true"/>
      <iref item="DAV:resource-must-be-null precondition" primary="true"/>
      (DAV:resource-must-be-null): A resource &MUST-NOT; exist at the Request-URI. 
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:parent-resource-must-be-non-null (pre)" primary="true"/>
      <iref item="DAV:parent-resource-must-be-non-null precondition" primary="true"/>
      (DAV:parent-resource-must-be-non-null): The Request-URI minus the last
      past segment &MUST; identify a collection.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:name-allowed (pre)" primary="true"/>
      <iref item="DAV:name-allowed precondition" primary="true"/>
      (DAV:name-allowed): The last segment of the Request-URI is available for
      use as a resource name.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:locked-update-allowed (pre)" primary="true"/>
      <iref item="DAV:locked-update-allowed precondition" primary="true"/>
      (DAV:locked-update-allowed): If the collection identified by the
      Request-URI minus the last path segment is write-locked, then the appropriate
      token &MUST; be specified in an If request header.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:redirect-lifetime-supported (pre)" primary="true"/>
      <iref item="DAV:redirect-lifetime-supported precondition" primary="true"/>
      (DAV:redirect-lifetime-supported): If the request body contains a DAV:redirect-lifetime
      element, the server &MUST; support the specified lifetime.  Support for DAV:temporary is &REQUIRED;, while
      support for DAV:permanent is &OPTIONAL;.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:legal-reftarget (pre)" primary="true"/>
      <iref item="DAV:legal-reftarget precondition" primary="true"/>
      (DAV:legal-reftarget): The specified is a legal URI or relative-ref.
    </t>
  </list>
</t>
<t>
  <iref item="MKREDIRECTREF method" subitem="Postconditions" primary="true"/>
  <x:h>Postconditions</x:h>
  <list>
    <t>
      <iref item="Condition Names" subitem="DAV:new-redirectref (post)" primary="true"/>
      <iref item="DAV:new-redirectref postcondition" primary="true"/>
      (DAV:new-redirectref): a new redirect reference resource is created
      whose DAV:reftarget property has the value specified in the request body.
    </t>
  </list>
</t>

<section title="Example: Creating a Redirect Reference Resource with MKREDIRECTREF">
<figure><preamble>
&gt;&gt; Request:</preamble>
<artwork type='message/http; msgtype="request"'>
MKREDIRECTREF /~whitehead/dav/spec08.ref HTTP/1.1
Host: www.example.com
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx

&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;D:mkredirectref xmlns:D="DAV:"&gt;
  &lt;D:reftarget&gt;
    &lt;D:href&gt;/i-d/draft-webdav-protocol-08.txt&lt;/D:href&gt;
  &lt;/D:reftarget&gt;
&lt;/D:mkredirectref&gt;
</artwork>
</figure>

<figure><preamble>
&gt;&gt; Response:</preamble>
<artwork type='message/http; msgtype="response"'>
HTTP/1.1 201 Created
</artwork>
</figure>
<t>
  This request resulted in the creation of a new redirect reference 
  resource at 
  http://www.example.com/~whitehead/dav/spec08.ref, which points to 
  the resource identified by the DAV:reftarget property.  In this example, 
  the target resource is identified by the URI
  http://www.example.com/i-d/draft-webdav-protocol-08.txt.  The redirect
  reference resource's DAV:resourcetype property is set to DAV:redirectref,
  and its DAV:redirect-lifetime property has the value DAV:temporary.
</t>
</section>
</section>





<section title="UPDATEREDIRECTREF Method" anchor="METHOD_UPDATEREDIRECTREF">
<iref item="UPDATEREDIRECTREF method" primary="true"/>
<iref item="Methods" subitem="UPDATEREDIRECTREF" primary="true"/>
<t>
  The UPDATEREDIRECTREF method requests the update of a redirect reference resource. 
</t>
<t>
  If a UPDATEREDIRECTREF request fails, the server state preceding the request &MUST; be restored. 
</t>
<t>
  Responses from a UPDATEREDIRECTREF request &MUST-NOT; be cached, as UPDATEREDIRECTREF has
  non-safe semantics (see <xref target="RFC2616" x:fmt="," x:sec="9.1"/>).  
</t>
<t>
  <iref item="UPDATEREDIRECTREF method" subitem="Marshalling" primary="true"/>
  <x:h>Marshalling</x:h>
  <list>
    <t>The request body &MUST; be a DAV:updateredirectref XML element.
      <figure><artwork type="application/xml-dtd">
   &lt;!ELEMENT updateredirectref (reftarget?, redirect-lifetime?)&gt;
</artwork>
    <postamble>See <xref target="METHOD_MKREDIRECTREF"/> for a definition of
    DAV:reftarget and DAV:redirect-lifetime.</postamble></figure>
    </t>
    <t>
      If no DAV:reftarget element is specified, the server &MUST-NOT; change
      the target of the redirect reference.   
    </t>
    <t>
      If no DAV:redirect-lifetime element is specified, the server &MUST-NOT; change
      the lifetime of the redirect reference.
    </t>
    <t>
      If a response body for a successful request is included, it &MUST; be a
      DAV:updateredirectref-response XML element.  Note that this document does
      not define any elements for the UPDATEREDIRECTREF response body, but the
      DAV:updateredirectref-response element is defined to ensure
      interoperability between future extensions that do define elements for
      the response body.
      <figure><artwork type="application/xml-dtd">
<iref item="XML elements" subitem="DAV:updateredirectref-response" primary="true"/><iref item="DAV:updateredirectref-response XML element" primary="true"/>   &lt;!ELEMENT updateredirectref-response ANY&gt;</artwork></figure>
    </t>
  </list>
</t>
<t>
  <iref item="UPDATEREDIRECTREF method" subitem="Preconditions" primary="true"/>
  <x:h>Preconditions</x:h>
  <list>
    <t>
      <iref item="Condition Names" subitem="DAV:locked-update-allowed (pre)" primary="true"/>
      <iref item="DAV:locked-update-allowed precondition" primary="true"/>
      (DAV:locked-update-allowed): if the resource is write-locked, then the appropriate
      token &MUST; be specified in an If request header.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:must-be-redirectref (pre)" primary="true"/>
      <iref item="DAV:must-be-redirectref precondition" primary="true"/>
      (DAV:must-be-redirectref): the resource identified by the Request-URI
      must be a redirect reference resource as defined by this specification.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:redirect-lifetime-supported (pre)" primary="true"/>
      <iref item="DAV:redirect-lifetime-supported precondition" primary="true"/>
      (DAV:redirect-lifetime-supported): see <xref target="METHOD_MKREDIRECTREF"/>.
    </t>
    <t>
      <iref item="Condition Names" subitem="DAV:redirect-lifetime-update-supported (pre)"/>
      <iref item="DAV:redirect-lifetime-update-supported precondition"/>
      (DAV:redirect-lifetime-update-supported): servers &MAY; support changing
      the DAV:redirect-lifetime property; if they don't, this condition code can
      be used to signal failure.
    </t>

    <t>
      <iref item="Condition Names" subitem="DAV:legal-reftarget (pre)"/>
      <iref item="DAV:legal-reftarget precondition"/>
      (DAV:legal-reftarget): see <xref target="METHOD_MKREDIRECTREF"/>.
    </t>
  </list>
</t>
<t>
  <iref item="UPDATEREDIRECTREF method" subitem="Postconditions" primary="true"/>
  <x:h>Postconditions</x:h>
  <list>
    <t>
      <iref item="Condition Names" subitem="DAV:redirectref-updated (post)" primary="true"/>
      <iref item="DAV:redirectref-updated postcondition" primary="true"/>
      (DAV:redirectref-updated): the DAV:reftarget and DAV:redirect-lifetime
      properties of the redirect reference have been updated accordingly.
    </t>
  </list>
</t>

<section title="Example: Updating a Redirect Reference Resource with UPDATEREDIRECTREF">
<figure><preamble>
&gt;&gt; Request:</preamble>
<artwork type='message/http; msgtype="request"'>
UPDATEREDIRECTREF /~whitehead/dav/spec08.ref HTTP/1.1
Host: www.example.com
Apply-To-Redirect-Ref: T
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx

&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;D:updateredirectref xmlns:D="DAV:"&gt;
  &lt;D:reftarget&gt;
    &lt;D:href&gt;/i-d/draft-webdav-protocol-08b.txt&lt;/D:href&gt;
  &lt;/D:reftarget&gt;
&lt;/D:updateredirectref&gt;
</artwork>
</figure>

<figure><preamble>
&gt;&gt; Response:</preamble>
<artwork type='message/http; msgtype="response"'>
HTTP/1.1 200 OK
</artwork>
</figure>
<t>
  This request has updated the redirect reference's DAV:reftarget property to "/i-d/draft-webdav-protocol-08b.txt"
  and has not changed the DAV:redirect-lifetime value.  Note that
  the "Apply-To-Redirect-Ref" request header must be used; otherwise, the
  request would result in a redirect (3xx) response status.
</t>
</section>
</section>


<section title="Operations on Collections That Contain Redirect Reference Resources" anchor="operations.on.collections.that.contain.redirect.reference.resources">




<t>
  According to <xref target="RFC2518" x:fmt="," x:sec="9.2"/>, methods that have defined
  interactions with the "Depth" request header should apply all other
  request headers to each resource in scope.  However,
  applying this principle to the "Apply-To-Redirect-Ref" header uniformly 
  would make it impractical to implement this specification on top of
  existing servers and also would result in unexpected server behaviour for
  clients that do not take the existence of redirect references into account.  On
  the other hand, the definition of the "Depth" header
  allows alternate behaviours to be explicitly defined.
</t>
<t>
  For this reason, this specification defines the interaction between "Depth"
  and "Apply-To-Redirect-Ref" request headers on a case-by-case basis and
  also provides a default for methods not mentioned here that do not specify
  the behaviour themselves.
</t>
<texttable>
  <ttcol>method name</ttcol>
  <ttcol>defined in</ttcol>
  <ttcol>supported depths</ttcol>
  <ttcol>behaviour</ttcol>

  <c>COPY</c>
  <c><xref target="RFC2518"/>, <xref target="RFC2518" x:fmt="number" x:sec="8.9"/></c>
  <c>0, infinity</c>
  <c>"T"</c>

  <c>DELETE</c>
  <c><xref target="RFC2518"/>, <xref target="RFC2518" x:fmt="number" x:sec="8.7"/></c>
  <c>infinity</c>
  <c>"T"</c>
  
  <c>LOCK</c>
  <c><xref target="RFC2518"/>, <xref target="RFC2518" x:fmt="number" x:sec="8.11"/></c>
  <c>0, infinity</c>
  <c>"T"</c>

  <c>MOVE</c>
  <c><xref target="RFC2518"/>, <xref target="RFC2518" x:fmt="number" x:sec="8.10"/></c>
  <c>0, infinity</c>
  <c>"T"</c>

  <c>PROPFIND</c>
  <c><xref target="RFC2518"/>, <xref target="RFC2518" x:fmt="number" x:sec="8.2"/></c>
  <c>0, 1, infinity</c>
  <c>inherit</c>
  
  <c>REPORT</c>
  <c><xref target="RFC3253"/>, <xref target="RFC2518" x:fmt="number" x:sec="3.6"/></c>
  <c>0, 1, infinity</c>
  <c>inherit</c>

  <c>default</c>
  <c/>
  <c/>
  <c>"T"</c>
</texttable>
<t>
  When the behaviour is defined to be "inherit", the method should follow
  RFC2518's default behaviour for "Depth" operations, which means applying
  the value given for "Apply-To-Redirect-Ref" to each resource in scope.  On
  the other hand, when it is defined to be "T", the method should behave as
  if a "Apply-To-Redirect-Ref: T" header was specified for each operation on
  child resources.  The latter ensures that "Depth: infinity" operations
  will not fail unexpectedly just because there was a redirect reference resource
  in scope.
</t>







<section title="Example: PROPFIND on a Collection with Redirect Reference Resources">
<t>
  Suppose a PROPFIND request with Depth: infinity is submitted to the 
  following collection, with the members shown here:
</t>
<figure><artwork type="example">
/MyCollection/
     (non-reference resource) diary.html
     (redirect reference resource) nunavut
</artwork>

</figure>
<figure><preamble>
&gt;&gt; Request:</preamble>

<artwork type='message/http; msgtype="request"'>
PROPFIND /MyCollection/ HTTP/1.1
Host: example.com
Depth: infinity
Apply-To-Redirect-Ref: F
Content-Type: text/xml
Content-Length: xxxx

&lt;?xml version="1.0" ?&gt;
&lt;D:propfind xmlns:D="DAV: "&gt;
  &lt;D:prop xmlns:J="http://example.com/jsprops/"&gt;
    &lt;D:resourcetype/&gt;
    &lt;J:keywords/&gt;
  &lt;/D:prop&gt;
&lt;/D:propfind&gt;
</artwork>

</figure>
<figure><preamble>
&gt;&gt; Response:</preamble>

<artwork type='message/http; msgtype="response"'>
HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Length: xxxx

&lt;?xml version="1.0" ?&gt;
&lt;D:multistatus xmlns:D="DAV:" xmlns:J="http://example.com/jsprops/"&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/MyCollection/&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype&gt;&lt;D:collection/&gt;&lt;/D:resourcetype&gt;
        &lt;J:keywords&gt;diary, interests, hobbies&lt;/J:keywords&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/MyCollection/diary.html&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype/&gt;
        &lt;J:keywords&gt;diary, travel, family, history&lt;/J:keywords&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/MyCollection/nunavut&lt;/D:href&gt;
    &lt;D:status&gt;HTTP/1.1 302 Found&lt;/D:status&gt;
    &lt;D:location&gt; 
      &lt;D:href&gt;http://example.ca/art/inuit/&lt;/D:href&gt;
    &lt;/D:location&gt;
  &lt;/D:response&gt;
&lt;/D:multistatus&gt;
</artwork>

</figure>
<t>
  In this example, the Depth header is set to infinity, and the Apply-To-Redirect-Ref
  header is set to "F".  The collection contains one URI that 
  identifies a redirect reference resource.  The response element for the 
  redirect reference resource has a status of 302 (Found) and includes a 
  DAV:location extension element to allow clients to retrieve the properties of 
  its target resource.  (The response element for the redirect reference 
  resource does not include the requested properties.  The client can 
  submit another PROPFIND request to the URI in the DAV:location pseudo-property
  to retrieve those properties.) 
</t>
</section>

<section title="Example: PROPFIND with Apply-To-Redirect-Ref on a Collection with Redirect Reference Resources">
<t>
  Suppose a PROPFIND request with "Apply-To-Redirect-Ref: T" and Depth: 
  infinity is submitted to the following collection, with the members 
  shown here:
</t>
<figure><artwork type="example">
/MyCollection/
     (non-reference resource) diary.html
     (redirect reference resource) nunavut
</artwork></figure>
<figure><preamble>
&gt;&gt; Request:</preamble>
<artwork type='message/http; msgtype="request"'>
PROPFIND /MyCollection/ HTTP/1.1
Host: example.com
Depth: infinity
Apply-To-Redirect-Ref: T
Content-Type: text/xml
Content-Length: xxxx

&lt;?xml version="1.0" ?&gt;
&lt;D:propfind xmlns:D="DAV:"&gt;
  &lt;D:prop&gt;
    &lt;D:resourcetype/&gt;
    &lt;D:reftarget/&gt;
    &lt;D:redirect-lifetime/&gt;
  &lt;/D:prop&gt;
&lt;/D:propfind&gt;
</artwork>

</figure>

<figure><preamble>
&gt;&gt; Response:</preamble>
<artwork type='message/http; msgtype="response"'>
HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Length: xxxx

&lt;?xml version="1.0" ?&gt;
&lt;D:multistatus xmlns:D="DAV:"&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/MyCollection/&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype&gt;&lt;D:collection/&gt;&lt;/D:resourcetype&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:reftarget/&gt;
        &lt;D:redirect-lifetime/&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 404 Not Found&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/MyCollection/diary.html&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype/&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:reftarget/&gt;
        &lt;D:redirect-lifetime/&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 404 Not Found&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/MyCollection/nunavut&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype&gt;&lt;D:redirectref/&gt;&lt;/D:resourcetype&gt;
        &lt;D:reftarget&gt;
          &lt;D:href&gt;http://example.ca/art/inuit/&lt;/D:href&gt;
        &lt;/D:reftarget&gt;
        &lt;D:redirect-lifetime&gt;&lt;D:temporary/&gt;&lt;/D:redirect-lifetime&gt;
      &lt;/D:prop&gt;
    &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
&lt;/D:multistatus&gt;
</artwork>
</figure>
<t>
  Since the "Apply-To-Redirect-Ref: T" header is present, the response shows 
  the properties of the redirect reference resource in the collection 
  rather than reporting a 302 status.
</t>
</section>




</section>

<section title="Operations on Targets of Redirect Reference Resources" anchor="operations.on.targets.of.redirect.reference.resources">
<t>
  Operations on targets of redirect reference resources have no effect on 
  the reference resource. 
</t>
</section>

<section title="Relative References in DAV:reftarget">
<t>
  The URI in the href in a DAV:reftarget property &MAY; be a relative reference.  In
  this case, the base URI to be used for resolving it to 
  absolute form is the URI used in the HTTP message to identify the 
  redirect reference resource to which the DAV:reftarget property belongs.  
</t>
<t>
  When DAV:reftarget appears in the context of a Multi-Status response, it 
  is in a DAV:response element that contains a single DAV:href element.  The
  value of this DAV:href element serves as the base URI for resolving 
  a relative reference in DAV:reftarget.  The value of DAV:href may itself be 
  relative, in which case it must be resolved first in order to serve as 
  the base URI for the relative reference in DAV:reftarget.  If the DAV:href 
  element is relative, its base URI is constructed from the scheme 
  component "http", the value of the Host header in the request, and the 
  Request-URI.
</t>



<section title="Example: Resolving a Relative Reference in a Multi-Status Response">
<figure><preamble>
&gt;&gt; Request:</preamble>
<artwork type='message/http; msgtype="request"'>
PROPFIND /geog/ HTTP/1.1
Host: example.com
Apply-To-Redirect-Ref: T
Depth: 1
Content-Type: text/xml
Content-Length: nnn

&lt;?xml version="1.0" ?&gt;
&lt;D:propfind xmlns:D="DAV:"&gt;
  &lt;D:prop&gt;
    &lt;D:resourcetype/&gt;
    &lt;D:reftarget/&gt;
  &lt;/D:prop&gt;
&lt;/D:propfind&gt;
</artwork>

</figure>
<figure><preamble>
&gt;&gt; Response:</preamble>
<artwork type='message/http; msgtype="response"'>
HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Length: nnn

&lt;?xml version="1/0" ?&gt;
&lt;D:multistatus xmlns:D="DAV:"&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/geog/&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype&gt;&lt;D:collection/&gt;&lt;/D:resourcetype&gt;
      &lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;&lt;D:reftarget/&gt;&lt;/D:prop&gt;
      &lt;D:status&gt;HTTP/1.1 404 Not Found&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
  &lt;D:response&gt;
    &lt;D:href&gt;/geog/stats.html&lt;/D:href&gt;
    &lt;D:propstat&gt;
      &lt;D:prop&gt;
        &lt;D:resourcetype&gt;&lt;D:redirectref/&gt;&lt;/D:resourcetype&gt;
        &lt;D:reftarget&gt;
          &lt;D:href&gt;statistics/population/1997.html&lt;/D:href&gt;
        &lt;/D:reftarget&gt;
      &lt;/D:prop&gt;
    &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
    &lt;/D:propstat&gt;
  &lt;/D:response&gt;
&lt;/D:multistatus&gt;
</artwork>
</figure>
<t>
  In this example, the relative 
  reference "statistics/population/1997.html" is 
  returned as the value of the DAV:reftarget property for the reference resource identified 
  by href /geog/stats.html.  The href is itself a relative reference, which 
  resolves to http://example.com/geog/stats.html.  This is the base URI 
  for resolving the relative reference in reftarget.  The absolute URI of 
  reftarget is http://example.com/geog/statistics/population/1997.html.
</t>
</section>
</section>

<section title="Redirect References to Collections" anchor="redirect.references.to.collections">
<t>
  In a Request-URI /segment1/segment2/segment3, any of the three segments 
  may identify a redirect reference resource.  (See 
  <xref target="RFC3986" x:fmt="," x:sec="3.3"/>, 
  for definitions of "path" and "segment".)  If any segment in a Request-URI
  identifies a redirect reference resource, the response &SHOULD; be a 
  3xx.  The value of the Location header in the  response is as follows: 
</t>
<t>
  The leftmost path segment of the Request-URI that identifies a redirect 
  reference resource, together with all path segments and separators to 
  the left of it, is replaced by the value of the redirect reference 
  resource's DAV:reftarget property (resolved to an absolute URI).  The 
  remainder of the Request-URI is concatenated to this path.  
</t>
<t>
  Note: If the DAV:reftarget property ends with a "/" and the remainder of 
  the Request-URI is non-empty (and therefore must begin with a "/"), the 
  final "/" in the DAV:reftarget property is dropped before the remainder 
  of the Request-URI is appended.
</t>
<t>
  Consider Request-URI /x/y/z.html.  Suppose that /x/ is a redirect 
  reference resource, whose target resource is collection /a/, which 
  contains redirect reference resource y whose target resource is 
  collection /b/, which contains redirect reference resource z.html, whose 
  target resource is /c/d.html.
</t>
<figure><artwork align="center" type="drawing">
/x/y/z.html
    |
    | /x -&gt; /a
    |
    v
/a/y/z.html
    |
    | /a/y -&gt; /b
    |
    v
/b/z.html
    |
    | /b/z.html -&gt; /c/d.html
    |
    v
/c/d.html
</artwork></figure>
<t>
  In this case, the client must follow up three separate 3xx responses 
  before finally reaching the target resource.  The server responds to the 
  initial request with a 3xx with Location: /a/y/z.html, and the client 
  resubmits the request to /a/y/z.html.  The server responds to this 
  request with a 3xx with Location: /b/z.html, and the client resubmits 
  the request to /b/z.html.  The server responds to this request with a 
  3xx with Location: /c/d.html, and the client resubmits the request to 
  /c/d.html.  This final request succeeds.
</t>

<t>
  <list><t>
  <x:h>Note:</x:h> The behaviour described above may have a very serious impact on the
  efficiency of mapping Request-URIs to resources in HTTP request
  processing.  Therefore, servers &MAY; respond with a 404 status code if the cost of checking
  all leading path segments for redirect references seems prohibitive.
  </t></list>
</t>

</section>


<section title="Headers" anchor="headers">

<section title="Redirect-Ref Response Header" anchor="header.redirect-ref">
<iref item="Redirect-Ref header" primary="true"/>
<iref item="Headers" subitem="Redirect-Ref" primary="true"/>
<figure>

<artwork type="abnf2616">
Redirect-Ref = "Redirect-Ref:" (URI | relative-ref)
; URI: see <xref target="RFC3986" x:fmt="," x:sec="3"/>
; relative-ref: see <xref target="RFC3986" x:fmt="," x:sec="4.2"/>
</artwork>

</figure>
<t>
  The Redirect-Ref header is used in all 3xx responses from redirect 
  reference resources.  The value is the  link target as specified during
  redirect reference resource creation. 
</t>
</section>

<section title="Apply-To-Redirect-Ref Request Header" anchor="header.apply-to-redirect-ref">
<iref item="Apply-To-Redirect-Ref header" primary="true"/>
<iref item="Headers" subitem="Apply-To-Redirect-Ref" primary="true"/>
<figure><artwork type="abnf2616">
Apply-To-Redirect-Ref = "Apply-To-Redirect-Ref" ":" ("T" | "F")
</artwork></figure>
<t>
  The optional Apply-To-Redirect-Ref header can be used on any request to 
  a redirect reference resource.  When it is present and set to "T", the request &MUST; be 
  applied to the reference resource itself, and a 3xx response &MUST-NOT; be 
  returned.
</t>
<t>
  If the Apply-To-Redirect-Ref header is used on a request to any other 
  sort of resource besides a redirect reference resource, the server 
  &MUST; ignore it. 
</t>
</section>
</section>




<section title="Redirect Reference Resource Properties" anchor="properties">
<t>
  The properties defined below are &REQUIRED; on redirect reference resources.  A PROPFIND/allprop request &SHOULD-NOT; return any of the properties defined in this document.
</t>

<section title="DAV:redirect-lifetime (protected)" anchor="redirect-lifetime.property">
<iref item="DAV:redirect-lifetime property" primary="true"/>
<iref item="Properties" subitem="DAV:redirect-lifetime" primary="true"/>
<t>
  This property provides information about the lifetime of a redirect.  It can
  be either DAV:permanent (HTTP status 301) or DAV:temporary (HTTP status
  302).  Future protocols may define additional values. 
</t>
<figure><artwork type="application/xml-dtd">
<iref item="XML elements" subitem="DAV:redirect-lifetime" primary="true"/><iref item="DAV:redirect-lifetime XML element" primary="true"/>&lt;!ELEMENT redirect-lifetime (permanent | temporary)&gt;
<iref item="XML elements" subitem="DAV:permanent" primary="true"/><iref item="DAV:permanent XML element" primary="true"/>&lt;!ELEMENT permanent EMPTY&gt;
<iref item="XML elements" subitem="DAV:temporary" primary="true"/><iref item="DAV:temporary XML element" primary="true"/>&lt;!ELEMENT temporary EMPTY&gt;
</artwork></figure>
</section>

<section title="DAV:reftarget (protected)" anchor="reftarget.property">

<iref item="DAV:reftarget property" primary="true"/>
<iref item="Properties" subitem="DAV:reftarget" primary="true"/>
<t>
  This property provides an efficient way for clients to discover the URI of
  the target resource.  This is a read-only property after its initial creation.
  Its value can only be set in a MKREDIRECTREF request.  The value is a DAV:href
  element containing the URI of the target resource.
</t>
<figure><artwork type="application/xml-dtd">
&lt;!ELEMENT reftarget href &gt;
</artwork></figure>
</section>
</section>




<section title="XML Elements" anchor="xml.elements">

<section title="redirectref XML Element" anchor="redirectref.xml.element">
<iref item="DAV:redirectref resource type" primary="true"/>
<iref item="Resource Types" subitem="DAV:redirectref" primary="true"/>
<t>
<list style="hanging">
<t hangText="Name:">redirectref</t>
<t hangText="Namespace:">DAV:</t>
<t hangText="Purpose:">Used as the value of the DAV:resourcetype property to   
            specify that the resource type is a redirect reference   
            resource.</t>
</list>
</t>
<figure><artwork type="application/xml-dtd">
&lt;!ELEMENT redirectref EMPTY &gt;
</artwork></figure>
</section>
</section>


<section title="Extensions to the DAV:response XML Element for Multi-Status Responses" anchor="extensions.to.response.element">
<t>
  As described in <xref target="operations.on.collections.that.contain.redirect.reference.resources"/>, the DAV:location element
  may be returned in the DAV:response element of  a 207 Multi-Status response,
  to allow clients to resubmit their requests  to the target resource of a
  redirect reference resource.  
</t>
<t>
  Consequently, the definition of the DAV:response XML element changes to 
  the following:
</t>
<figure><artwork type="application/xml-dtd">
&lt;!ELEMENT response (href, ((href*, status)|(propstat+)),
                    responsedescription?, location?) &gt;
&lt;!ELEMENT location (href) &gt; 
</artwork></figure>


</section>


<section title="Capability Discovery" anchor="capability.discovery">
<iref item="DAV header" subitem="compliance class 'redirectrefs'" primary="true"/>
<t>
  Sections <xref target="RFC2518" x:fmt="number" x:sec="9.1"/> and <xref target="RFC2518" x:fmt="number" x:sec="15"/> of <xref target="RFC2518"/> describe the use of compliance classes 
  with the DAV header in responses to OPTIONS, to indicate which parts of 
  the WebDAV Distributed Authoring protocols the resource supports.  This 
  specification defines an &OPTIONAL; extension to <xref target="RFC2518"/>.  It defines a 
  new compliance class, called redirectrefs, for use with the DAV header 
  in responses to OPTIONS requests.  If a resource does support redirect 
  references, its response to an OPTIONS request may indicate that it 
  does, by listing the new redirectrefs compliance class in the DAV 
  header and by listing the MKREDIRECTREF method as one it supports.
</t>
<t>
  When responding to an OPTIONS request, any type of resource can include 
  redirectrefs in the value of the DAV header.  Doing so indicates that 
  the server permits a redirect reference resource at the Request-URI.
</t>
<section title="Example: Discovery of Support for Redirect Reference Resources">
<figure><preamble>
&gt;&gt; Request:</preamble>
<artwork type='message/http; msgtype="request"'>
OPTIONS /somecollection/someresource HTTP/1.1
Host: example.org
</artwork>
</figure>

<figure><preamble>
&gt;&gt; Response:</preamble>
<artwork type='message/http; msgtype="response"'>
HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
Allow: MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREDIRECTREF
DAV: 1, 2, redirectrefs
</artwork>

</figure>
<t>
  The DAV header in the response indicates that the resource 
  /somecollection/someresource is level 1 and level 2 compliant, as 
  defined in <xref target="RFC2518"/>.  In addition, /somecollection/someresource supports 
  redirect reference resources.  The Allow header indicates that 
  MKREDIRECTREF requests can be submitted to /somecollection/someresource.
</t>
</section>
</section>

<section title="Security Considerations" anchor="security.considerations">
<t>
  This section is provided to make applications that implement this protocol aware of the 
  security implications of this protocol. 
</t>
<t>
  All of the security considerations of HTTP/1.1 and the WebDAV 
  Distributed Authoring Protocol specification also apply to this protocol 
  specification.  In addition, redirect reference resources introduce 
  several new security concerns and increase the risk of some existing 
  threats.  These issues are detailed below.
</t>

<section title="Privacy Concerns">
<t>
  By creating redirect reference resources on a trusted server, it is 
  possible for a hostile agent to induce users to send private information 
  to a target on an unrelated system.   This risk is mitigated somewhat, 
  since clients are required to notify the user of the redirection for any 
  request other than GET or HEAD. (See <xref target="RFC2616" x:fmt="," x:sec="10.3.3"/>, 302 Found.)
</t>
</section>

<section title="Redirect Loops">
<t>
  Although redirect loops were already possible in HTTP 1.1, the 
  introduction of the MKREDIRECTREF method creates a new avenue for clients 
  to create loops accidentally or maliciously.  If the reference resource 
  and its target are on the same server, the server may be able to detect 
  MKREDIRECTREF requests that would create loops. See also <xref target="RFC2616" x:fmt="," x:sec="10.3"/>,
  "Redirection 3xx."
</t>
</section>

<section title="Redirect Reference Resources and Denial of Service">
<t>
  Denial of service attacks were already possible by posting URLs that 
  were intended for limited use at heavily used Web sites.  The 
  introduction of MKREDIRECTREF creates a new avenue for similar denial of 
  service attacks.  Clients can now create redirect reference resources at 
  heavily used sites to target locations that were not designed for heavy 
  usage.
</t>
</section>






<section title="Revealing Private Locations">
<t>
  There are several ways that redirect reference resources may reveal 
  information about collection structures.  First, the DAV:reftarget 
  property of every redirect reference resource contains the URI of the 
  target resource.  Anyone who has access to the reference resource can 
  discover the collection path that leads to the target resource.   The 
  owner of the target resource may have wanted to limit knowledge of this 
  collection structure.
</t>
<t>
  Sufficiently powerful access control mechanisms can control this risk to 
  some extent.  Property-level access control could prevent users from 
  examining the DAV:reftarget property.  (The Location header returned in 
  responses to requests on redirect reference resources reveals the same 
  information, however.)
</t>
<t>
  This risk is no greater than the similar risk posed by HTML links.
</t>
</section>


</section>


<section title="Internationalization Considerations">
<t>
  All internationalization considerations mentioned in <xref target="RFC2518"/> also apply to this document.
</t>

</section>

<section title="IANA Considerations" anchor="iana.considerations">

<t>
  All IANA considerations mentioned in <xref target="RFC2518"/> also 
  apply to this document.
</t>


<section title="HTTP headers">
<t>
  This document specifies the two new HTTP headers listed below.
</t>
<section title="Redirect-Ref">
<t>
<list style="hanging">
  <t hangText="Header field name:">Redirect-Ref</t>
  <t hangText="Applicable protocol:">http</t>
  <t hangText="Status:">standard</t>
  <t hangText="Author/Change controller:">IETF</t>
  <t hangText="Specification document:">this specification (<xref target="header.redirect-ref"/>)</t>
</list>
</t>
</section>
<section title="Apply-To-Redirect-Ref">
<t>
<list style="hanging">
  <t hangText="Header field name:">Apply-To-Redirect-Ref</t>
  <t hangText="Applicable protocol:">http</t>
  <t hangText="Status:">standard</t>
  <t hangText="Author/Change controller:">IETF</t>
  <t hangText="Specification document:">this specification (<xref target="header.apply-to-redirect-ref"/>)</t>
</list>
</t>
</section>
</section>


</section>


<section title="Contributors">
<t>
  Many thanks to Jason Crawford, Jim Davis, Chuck Fay, and Judith Slein, who can take credit
  for big parts of the original design of this specification. 
</t>
</section>


<section title="Acknowledgements">
<t>
  This document has benefited from thoughtful discussion by Jim Amsden, Peter 
  Carlson, Steve Carter, Tyson Chihaya, Ken Coar, Ellis Cohen, Bruce 
  Cragun, Spencer Dawkins, Mark Day, Rajiv Dulepet, David Durand, Lisa Dusseault, Stefan Eissing, Roy 
  Fielding, Yaron Goland, Fred Hitt, Alex Hopmann, James Hunt, Marcus 
  Jager, Chris Kaler, Manoj Kasichainula, Rohit Khare, Daniel LaLiberte, 
  Steve Martin, Larry Masinter, Jeff McAffer, Joe Orton, 
  Surendra Koduru Reddy, Juergen Reuter, Max 
  Rible, Sam Ruby, Bradley Sergeant, Nick Shelness, John Stracke, John 
  Tigue, John Turner, Kevin Wiggen, and others.
</t>
</section>

	</middle>
    <back>
        
<references title="Normative References">

<reference anchor="RFC2119">
  <front>
    <title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement Levels</title>
    <author initials="S." surname="Bradner" fullname="Scott Bradner">
    <organization>Harvard University</organization>
      <address>
        <email>sob@harvard.edu</email>
      </address>
    </author>
    <date month="March" year="1997"/>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
</reference>



<reference anchor="RFC3986">
  <front>
    <title abbrev="URI Generic Syntax">Uniform Resource Identifier (URI): Generic Syntax</title>
    <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
      <organization abbrev="W3C/MIT">World Wide Web Consortium</organization>
      <address>
        <email>timbl@w3.org</email>
      </address>
    </author>
    <author initials="R." surname="Fielding" fullname="Roy T. Fielding">
      <organization abbrev="Day Software">Day Software</organization>
      <address>
        <email>fielding@gbiv.com</email>
      </address>
    </author>
    <author initials="L." surname="Masinter" fullname="Larry Masinter">
      <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
      <address>
        <email>LMM@acm.org</email>
      </address>
    </author>
    <date month="January" year="2005"/>
  </front>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
</reference>


<reference anchor="RFC2518">
  <front>
    <title>HTTP Extensions for Distributed Authoring -- WEBDAV</title>
    <author initials="Y." surname="Goland" fullname="Y. Goland">
      <organization>Microsoft Corporation</organization>
      <address><email>yarong@microsoft.com</email></address>
    </author>
    <author initials="E." surname="Whitehead" fullname="E. J. Whitehead, Jr.">
      <organization abbrev="UC Irvine">Dept. Of Information and Computer Science, University of California, Irvine</organization>
    	<address><email>ejw@ics.uci.edu</email></address>
    </author>
    <author initials="A." surname="Faizi" fullname="A. Faizi">
      <organization abbrev="Netscape">Netscape</organization>
      <address><email>asad@netscape.com</email></address>
    </author>
    <author initials="S.R." surname="Carter" fullname="S. R. Carter">
      <organization abbrev="Novell">Novell</organization>
      <address><email>srcarter@novell.com</email></address>
    </author>
    <author initials="D." surname="Jensen" fullname="D. Jensen">
      <organization abbrev="Novell">Novell</organization>
      <address><email>dcjensen@novell.com</email></address>
    </author>
    <date month="February" year="1999"/>
  </front>
  <seriesInfo name="RFC" value="2518"/>
</reference>

<reference anchor="RFC2616">
  <front>
    <title>Hypertext Transfer Protocol -- HTTP/1.1</title>
    <author initials="R." surname="Fielding" fullname="R. Fielding">
      <organization>University of California, Irvine</organization>
      <address><email>fielding@ics.uci.edu</email></address>
    </author>
    <author initials="J." surname="Gettys" fullname="J. Gettys">
      <organization>W3C</organization>
      <address><email>jg@w3.org</email></address>
    </author>
    <author initials="J." surname="Mogul" fullname="J. Mogul">
      <organization>Compaq Computer Corporation</organization>
      <address><email>mogul@wrl.dec.com</email></address>
    </author>
    <author initials="H." surname="Frystyk" fullname="H. Frystyk">
      <organization>MIT Laboratory for Computer Science</organization>
      <address><email>frystyk@w3.org</email></address>
    </author>
    <author initials="L." surname="Masinter" fullname="L. Masinter">
      <organization>Xerox Corporation</organization>
      <address><email>masinter@parc.xerox.com</email></address>
    </author>
    <author initials="P." surname="Leach" fullname="P. Leach">
      <organization>Microsoft Corporation</organization>
      <address><email>paulle@microsoft.com</email></address>
    </author>
    <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
      <organization>W3C</organization>
      <address><email>timbl@w3.org</email></address>
    </author>
    <date month="June" year="1999"/>
  </front>
  <seriesInfo name="RFC" value="2616"/>
</reference>

<reference anchor="RFC3253">
  <front>
    <title>Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)</title>
    <author initials="G." surname="Clemm" fullname="G. Clemm">
      <organization>Rational Software</organization>
      <address><email>geoffrey.clemm@rational.com</email></address>
    </author>
    <author initials="J." surname="Amsden" fullname="J. Amsden">
      <organization>IBM</organization>
      <address><email>jamsden@us.ibm.com</email></address>
    </author>
    <author initials="T." surname="Ellison" fullname="T. Ellison">
      <organization>IBM</organization>
      <address><email>tim_ellison@uk.ibm.com</email></address>
    </author>
    <author initials="C." surname="Kaler" fullname="C. Kaler">
      <organization>Microsoft</organization>
      <address><email>ckaler@microsoft.com</email></address>
    </author>
    <author initials="J." surname="Whitehead" fullname="J. Whitehead">
      <organization>UC Santa Cruz, Dept. of Computer Science</organization>
      <address><email>ejw@cse.ucsc.edu</email></address>
    </author>
    <date month="March" year="2002"/>
  </front>
  <seriesInfo name="RFC" value="3253"/>
</reference>

</references>







</back>
</rfc>