<?xml version="1.0"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
    <!ENTITY rfc2119 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
    <!ENTITY rfc2616 PUBLIC ''
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml'>
    <!ENTITY html PUBLIC ''
      'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-html401-19991224.xml'>
    <!ENTITY xhtml PUBLIC ''
      'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-xhtml1-20020801.xml'>
    <!ENTITY iri PUBLIC ''
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3987.xml'>
    <!ENTITY atomsyntax PUBLIC ''
      'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-atompub-format.xml'>
]>

<rfc category="std" ipr="full3978" docName="draft-trackback.xml">
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no"?>

<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc compact="yes"?>
<front>
<title abbrev="Trackback">Trackback</title>
<author initials="" surname="" fullname="">
<organization></organization>
<address>
<postal>
<street></street>
<city></city> <region></region> <code></code>
<country></country>
</postal>
<phone></phone>
<email></email>
<uri></uri>
</address>
</author>
<date month="November" year="2005" />
<area>General</area>
<keyword>I-D</keyword>
<keyword>Internet-Draft</keyword>
<keyword>XML</keyword>
<keyword>Extensible Markup Language</keyword>
<keyword>Atom</keyword>
<keyword>RSS</keyword>
<keyword>Syndication</keyword>
<abstract><t>TBD.</t></abstract>
</front>
<middle>

<section title="Introduction">

<t>This document describes the TrackBack protocol -- a framework for peer-to-peer
communication and notification between web sites.  The central artifact of the 
TrackBack protocol is an HTTP request called a "Ping" that is used to essentially
communicate that "resource A is related to or linked to by resource B".</t>

<section title="Notational Conventions">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", 
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be 
interpreted as described in BCP 14, <xref target="RFC2119" />.</t>
</section>

<section title="Terminology">
<t>
<list style="symbols">
<t>TrackBack Ping URL - The HTTP URI to which TrackBack Ping requests are POSTed.</t>
<t>Ping - An HTTP POST request send from a client to a server for the purpose of
establishing an explicit relationship between Web resources.</t>
<t>Client - The entity sending a Ping.</t>
<t>Server - The entity receiving the Ping.</t>
<t>Target Resource - The Web resource to which a Ping is directed for the purpose
of establishing a relationship between it and an Originating Resource.</t>
<t>Originating Resource - A Web resource containing a reference or link to the
Target Resource.</t>
</list>
</t>
</section>

</section>

<section title="The TrackBack Protocol">

<t>TrackBack is an application layer protocol utilizing HTTP POST requests to 
establish relationships between Web resources.</t>

<t>For instance, given two domains A and B, when a resource is created on domain A 
that relates to or references a resource located within domain B, domain A sends an
HTTP POST request to domain B using a TrackBack Ping URL provided by domain B to 
notify domain B of the existence of the new resource.</t>

<section title="TrackBack Requests">

<t>The entity payload of TrackBack Ping requests consist of a collection of properties
expressed as name=value pairs encoded in accordance to the rules of the 
application/x-www-form-urlencoded media type as defined by 
<xref target="W3C.REC-html401-19991224" />.  The Content-Type header of the 
HTTP POST request MUST be 'application/x-www-form-urlencoded'.  Clients 
SHOULD transmit the character encoding of the entity payload using the charset 
parameter of the Content-Type header.</t>

<t>This specification defines the following TrackBack Ping properties:
<list style="symbols">
<t>title - A human readable title for the Originating Resource.</t>
<t>excerpt - A human readable excerpt of text from the Originating Resource.</t>
<t>url - The URL of the Originating Resource.</t>
<t>blog_name - A human readable name for the entity to which the Originating 
Resource belongs.</t>
<t>id - A permanent and universally unique Internationalized Resource Identifier, 
(IRI) <xref target="RFC3987" /> identifying the Originating Resource.</t>
<t>source - The URL of a resource containing the Originating Resource.</t>
</list>
</t>

<t>Of these properties, only "url" is required. Clients MAY choose to include
name=value pairs in addition to those described above.  Servers SHOULD ignore any 
such properties that it does not understand.</t>

<figure><preamble>Example TrackBack Ping Request</preamble>
<artwork><![CDATA[
  POST /trackback-url HTTP/1.1
  Host: example.org
  Content-Type: application/x-www-form-urlencoded; charset=utf-8
  Content-Length: nnnn

  title=My+Resource&url=http://example.org/a&excerpt=Hello+World \
  &blog_name=My+Blog&id=tag:example.org,2005:/resources/a
]]></artwork></figure>

</section>

<section title="TrackBack Responses">

<t>Upon successful receipt and processing of a TrackBack Ping Requests, the 
Server SHOULD respond with an HTTP status code of 200.</t>

<t>Whether the Ping was successfully processed or not, the entity payload of 
the HTTP response MUST include a TrackBack response document as specified 
below.  The Content-Type header for such document MUST be either 'text/xml'
or 'application/xml' and SHOULD specify the character encoding of the response
entity using the charset parameter.</t>

<figure><artwork><![CDATA[
  trackbackResponse = element response {
    ( trackbackError?,
    & trackbackMessage? )
  }

  trackbackError = element error { 1 | 0 }
  trackbackMessage = element message { text }
]]></artwork></figure>

<t>If the Ping request was successfully processed, the 'response' element MUST 
either omit the 'error' error or set the content value of the 'error' element 
to '0'.  If the Ping request was not successfully processed, the 'response' 
element MUST contain an 'error' element with a content value of '1' and SHOULD
contain a 'message' element whose content value conveys a human-readable 
explanation of error.</t>

<figure><preamble>Example Successful TrackBack Response</preamble>
<artwork><![CDATA[
  HTTP/1.1 200 OK
  Date: Mon, 14 Nov 2005 12:12:12 GMT
  Content-Length: nnnn
  Content-Type: application/xml; charset=utf-8

  <response>
    <error>0</error>
  </response>
]]></artwork></figure>

<figure><preamble>Example Failed TrackBack Response</preamble>
<artwork><![CDATA[
  HTTP/1.1 401 Unauthorized
  Date: Mon, 14 Nov 2005 12:12:12 GMT
  WWW-Authenticate: Basic realm="example.org"
  Content-Length: nnnn
  Content-Type: application/xml; charset=utf-8

  <response>
    <error>1</error>
    <message>Authentication is required</message>
  </response>
]]></artwork></figure>

</section>

</section>

<section title="TrackBack Auto-discovery">

<t>Before a Client can send a TrackBack Ping to a Server, it must first identify
the TrackBack Ping URL to which it send the HTTP POST request.  To facilitate 
the discovery of the TrackBack Ping URL, Servers MAY use either of the two
mechanisms described below.</t>

<section title="TrackBack Link">

<t>Individual Web resources represented by HTML <xref target="W3C.REC-html401-19991224" />, 
XHTML <xref target="W3C.REC-xhtml1-20020801" />, or Atom Syndication Format
<xref target="I-D.ietf-atompub-format" /> documents MAY contain a link element
with a 'rel' attribute value of 'trackback', a 'type' attribute value of 
'application/x-www-form-urlencoded', and an 'href' attribute specifying the 
Trackback Ping URL for the resource.</t>

<figure><preamble>Example HTML TrackBack Link</preamble>
<artwork><![CDATA[
  <link rel="trackback"
        type="application/x-www-form-urlencoded"
        href="http://example.org/trackback-url" />
]]></artwork></figure>

<figure><preamble>Example Atom TrackBack Link</preamble>
<artwork><![CDATA[
  <entry xmlns="http://www.w3.org/2005/Atom">
    ...
    <link rel="trackback"
          type="application/x-www-form-urlencoded"
          href="http://example.org/trackback-url" />
    ...
  </entry>
]]></artwork></figure>

</section>

<section title="TrackBack RDF Documents">

<t>Web resources that represent multiple potential Target Resources MAY provide
a single TrackBack RDF Document for each individual pingable resource.  These 
documents are typically embedded within HTML or XHTML documents and are typically
not intended to be dislayed within a Web browser.  In order to prevent browsers 
from displaying these documents, they may be embedded within Comment markup.</t>

<figure><artwork><![CDATA[
  <!--
  <rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:tb="http://madskills.com/public/xml/rss/module/trackback/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description
    rdf:about="http://www.majordojo.com/archives/2005/09/#000751"
    trackback:ping="http://example.org/trackback-url/123"
    dc:title="Some Web Resource"
    dc:identifier="http://example.org/resources/123"
    dc:subject="Miscellaneous"
    dc:description="Foo"
    dc:creator="byrnereese"
    dc:date="2005-09-19T11:23:59-08:00" />
  </rdf:RDF>
  -->
]]></artwork></figure>

</section>

</section>

<section title="Security Considerations">

<t>As an application protocol based on HTTP, the TrackBack Protocol is 
subject to the same security considerations discussed in <xref target="RFC2616" />.</t>

<t>The nature of the TrackBack Protocol makes it possible for malicious 
clients to send undesirable Pings to a Target Resource for the purpose of 
establishing illegitimate links between resources in order, in part, to boost 
the Originating Resources search engine rankings.  Such undesirable pings
are known as "TrackBack Spam".</t>

<t>The TrackBack Protocol does not specify any normative countermeasures
for preventing TrackBack Spam but a number of preventative practices have 
emerged through the implementation of the protocol.  For instance, some 
Servers have adopted the practice of scanning Originating Resources for 
legitimate links to the Target Resource.  As many forms of TrackBack Spam omit 
such links, such practice has been demonstrated to be an effective defense.</t>

<t>Another defensive practice that has proven effective is active moderation
of the received TrackBack pings.  With this approach, TrackBacks Pings are 
held in a temporary queue until an administrator either approves or denies 
the Ping.  This practice effectively ensures that undesirable Pings will be
filtered out during the administrative review process.</t>

<t>Additional methods of defending against TrackBack Spam could include 
blocking TrackBack Pings originating from the IP addresses of known TrackBack 
Spammers, automatic throttling of TrackBack Pings, or the use of HTTP
Authentication mechanisms.</t>

</section>

<section title="IANA Considerations">

<t>This specification specifies the following new value for the Atom Syndication 
Format's Registry of Link Relations:</t>

<figure><artwork><![CDATA[
  Attribute Value: 
      trackback
  Description:
      A URI that refers to a Trackback Ping URL
  Expected Display Characteristics:
      Not defined
  Security Considerations:
      See the "Security Considerations" section of this draft.
]]></artwork></figure>

</section>

</middle>

<back>
<references>
  &rfc2119;
  &rfc2616;
  &html;
  &xhtml;
  &atomsyntax;
  &iri;
</references>
</back>
</rfc>
