| draft-ietf-atompub-protocol-01.txt | draft-ietf-atompub-protocol-02.txt | |||
|---|---|---|---|---|
| Network Working Group J. Gregorio, Ed. | Network Working Group J. Gregorio, Ed. | |||
| Internet-Draft BitWorking, Inc | Internet-Draft BitWorking, Inc | |||
| Expires: January 17, 2005 R. Sayre, Ed. | Expires: March 22, 2005 R. Sayre, Ed. | |||
| Boswijck Memex Consulting | Boswijck Memex Consulting | |||
| July 19, 2004 | September 21, 2004 | |||
| The Atom Publishing Protocol | The Atom Publishing Protocol | |||
| draft-ietf-atompub-protocol-01.txt | draft-ietf-atompub-protocol-02.txt | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, I certify that any applicable | By submitting this Internet-Draft, I certify that any applicable | |||
| patent or other IPR claims of which I am aware have been disclosed, | patent or other IPR claims of which I am aware have been disclosed, | |||
| and any of which I become aware will be disclosed, in accordance with | and any of which I become aware will be disclosed, in accordance with | |||
| RFC 3668. | RFC 3668. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| skipping to change at page 1, line 35 | skipping to change at page 1, line 35 | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on January 17, 2005. | This Internet-Draft will expire on March 22, 2005. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2004). All Rights Reserved. | Copyright (C) The Internet Society (2004). All Rights Reserved. | |||
| Abstract | Abstract | |||
| This memo presents a protocol for using XML (Extensible Markup | This memo presents a protocol for using XML (Extensible Markup | |||
| Language) and HTTP (HyperText Transport Protocol) to edit content. | Language) and HTTP (HyperText Transport Protocol) to edit content. | |||
| The Atom Publishing Protocol is an application-level protocol for | The Atom Publishing Protocol is an application-level protocol for | |||
| publishing and editing Web resources belonging to periodically | publishing and editing Web resources belonging to periodically | |||
| updated websites. The protocol at its core is the HTTP transport of | updated websites. The protocol at its core is the HTTP transport of | |||
| Atom-formatted representations. The Atom format is documented in the | Atom-formatted representations. The Atom format is documented in the | |||
| Atom Syndication Format (draft-ietf-atompub-format-00.txt). | Atom Syndication Format (draft-ietf-atompub-format-02.txt). | |||
| Editorial Note | Editorial Note | |||
| To provide feedback on this Internet-Draft, join the | To provide feedback on this Internet-Draft, join the | |||
| <http://www.imc.org/atom-syntax/index.html>. | <http://www.imc.org/atom-syntax/index.html>. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1 Notational Conventions . . . . . . . . . . . . . . . . . . 4 | 1.1 Notational Conventions . . . . . . . . . . . . . . . . . . 4 | |||
| 1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. The Atom Publishing Protocol Model . . . . . . . . . . . . . 4 | 2. The Atom Publishing Protocol Model . . . . . . . . . . . . . 4 | |||
| 3. Functional Specification . . . . . . . . . . . . . . . . . . 5 | 3. Functional Specification . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1 PostURI . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.1 PostURI . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1.1 Locating the PostURI . . . . . . . . . . . . . . . . . 5 | 3.1.1 Locating the PostURI . . . . . . . . . . . . . . . . . 5 | |||
| 3.1.2 Request . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.1.2 Request . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1.3 Response . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.1.3 Response . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.2 EditURI . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.2 EditURI . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2.2 Request . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2.2 Request . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3 FeedURI . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3.3 FeedURI . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.3.2 Request . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3.2 Request . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.3.3 Response . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3.3 Response . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.4 Link Tag . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.4 ResourcePostURI . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.4.1 rel . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.4.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.4.2 href . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.4.2 Request . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.4.3 title . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.4.3 Response . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.4.4 type . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.5 Link Tag . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5 Atom Request and Response Body Constraints . . . . . . . . 11 | 3.5.1 rel . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5.1 id . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.5.2 href . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5.2 link . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.5.3 title . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5.3 title . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.5.4 type . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5.4 summary . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.6 Atom Request and Response Body Constraints . . . . . . . . 13 | |||
| 3.5.5 content . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.6.1 id . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5.6 issued . . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.6.2 link . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5.7 modified . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.6.3 title . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5.8 created . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.6.4 summary . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 3.5.9 author . . . . . . . . . . . . . . . . . . . . . . . . 13 | 3.6.5 content . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 3.5.10 contributor . . . . . . . . . . . . . . . . . . . . 13 | 3.6.6 issued . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 3.5.11 generator . . . . . . . . . . . . . . . . . . . . . 13 | 3.6.7 modified . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.6 Securing the Atom Protocol . . . . . . . . . . . . . . . . 13 | 3.6.8 created . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.6.1 [@@TBD@@ CGI Authentication] . . . . . . . . . . . . . 14 | 3.6.9 author . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . 14 | 3.6.10 contributor . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . 14 | 3.6.11 generator . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6. Appendix A - SOAP Enabling . . . . . . . . . . . . . . . . . 15 | 3.7 Securing the Atom Protocol . . . . . . . . . . . . . . . . 16 | |||
| 6.1 Servers . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.7.1 [@@TBD@@ CGI Authentication] . . . . . . . . . . . . . 16 | |||
| 6.2 Clients . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 4. Security Considerations . . . . . . . . . . . . . . . . . . 16 | |||
| 7. Appendix B - Examples . . . . . . . . . . . . . . . . . . . 15 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.1 Example for a weblog . . . . . . . . . . . . . . . . . . . 15 | 6. Appendix A - SOAP Enabling . . . . . . . . . . . . . . . . . 17 | |||
| 7.2 Example for a wiki . . . . . . . . . . . . . . . . . . . . 15 | 6.1 Servers . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 8. Revision History . . . . . . . . . . . . . . . . . . . . . . 15 | 6.2 Clients . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 17 | 7. Appendix B - Examples . . . . . . . . . . . . . . . . . . . 17 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 17 | 7.1 Example for a weblog . . . . . . . . . . . . . . . . . . . 17 | |||
| Intellectual Property and Copyright Statements . . . . . . . 19 | 7.2 Example for a wiki . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. Revision History . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 19 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 21 | ||||
| 1. Introduction | 1. Introduction | |||
| The Atom Publishing Protocol is an application-level protocol for | The Atom Publishing Protocol is an application-level protocol for | |||
| publishing and editing Web resources using HTTP [RFC2616] and XML. | publishing and editing Web resources using HTTP [RFC2616] and XML. | |||
| 1.1 Notational Conventions | 1.1 Notational Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| skipping to change at page 4, line 41 | skipping to change at page 4, line 41 | |||
| The Atom Publishing Protocol is an application-level protocol for | The Atom Publishing Protocol is an application-level protocol for | |||
| publishing and editing Web resources. Using the common HTTP verbs | publishing and editing Web resources. Using the common HTTP verbs | |||
| provides a pattern for working with all such Web resources: | provides a pattern for working with all such Web resources: | |||
| o GET is used to retrieve a representation of a resource or perform | o GET is used to retrieve a representation of a resource or perform | |||
| a read-only query. | a read-only query. | |||
| o PUT is used to update a known resource. | o PUT is used to update a known resource. | |||
| o POST is used to create a new dynamically-named resource. | o POST is used to create a new dynamically-named resource. | |||
| o DELETE is used to remove a resource. | o DELETE is used to remove a resource. | |||
| There are three major classes of URIs in this specification: PostURI, | There are four major classes of URI [RFC2396] in this specification: | |||
| FeedURI and EditURI. This specification defines the expected actions | PostURI, ResourcePostURI, FeedURI, and EditURI. This specification | |||
| for each of the methods listed. A URI MAY support methods not listed | defines the expected actions for each of the methods listed. A URI | |||
| here. For example, an EditURI could support a POST or OPTIONS | MAY support methods not listed here. For example, an EditURI could | |||
| method. However, what those methods do is beyond the scope of this | support a POST or OPTIONS method. However, what those methods do is | |||
| specification. | beyond the scope of this specification. | |||
| o EditURI: PUT, GET, DELETE | o EditURI: PUT, GET, DELETE | |||
| o PostURI: POST | o PostURI: POST | |||
| o FeedURI: GET | o FeedURI: GET | |||
| o ResourcePostURI: POST | ||||
| This document does not specify the form of the URIs that are used. | This document does not specify the form of the URIs that are used. | |||
| The URI space of each server is controlled, as defined by HTTP, by | The URI space of each server is controlled, as defined by HTTP, by | |||
| the server alone. What this document does specify are the formats of | the server alone. What this document does specify are the formats of | |||
| the files that are exchanged and the actions that can be performed on | the files that are exchanged and the actions that can be performed on | |||
| the URIs embedded in those files. | the URIs embedded in those files. | |||
| 3. Functional Specification | 3. Functional Specification | |||
| 3.1 PostURI | 3.1 PostURI | |||
| The PostURI is used to create entries. These can be either full | The PostURI is used to create entries. These can be either full | |||
| skipping to change at page 5, line 37 | skipping to change at page 5, line 39 | |||
| The second place a PostURI may be found an atom:link element that is | The second place a PostURI may be found an atom:link element that is | |||
| a child of the atom:feed element. The third place a PostURI may be | a child of the atom:feed element. The third place a PostURI may be | |||
| found is in the atom:link element of an atom:entry. | found is in the atom:link element of an atom:entry. | |||
| @@ TBD @@ - Discuss subordinate resources and what a PostURI means | @@ TBD @@ - Discuss subordinate resources and what a PostURI means | |||
| based on where the URI was found. | based on where the URI was found. | |||
| <link rel="service.post" | <link rel="service.post" | |||
| type="application/atom+xml" | type="application/atom+xml" | |||
| href="URI for Posting goes here" | href="URI for Posting goes here" | |||
| title="The name of the site."> | title="The name of the site." /> | |||
| 3.1.2 Request | 3.1.2 Request | |||
| The request contains a filled-in Atom entry, subject to the | The request contains a filled-in Atom entry, subject to the | |||
| constraints in section Section 3.5. | constraints in section Section 3.6. | |||
| 3.1.3 Response | 3.1.3 Response | |||
| The possible status codes from a POST are 201, 303, 400, 404, 410 and | The possible status codes from a POST are 201, 303, 400, 404, 409, | |||
| 500. | 410 and 500. | |||
| 3.1.3.1 Response code 201 | 3.1.3.1 Response code 201 | |||
| Response includes a Location: header with the URI of the created | The Response MUST include a Location: header with the URI of the | |||
| resource, i.e. the URI used to edit the entry, as opposed to the URI | created resource. The URI returned must be the EditURI of the entry | |||
| used to display the content. The body of the response will contain | just created. The body of the response SHOULD contain the newly | |||
| the entry "filled-in" with time stamps and any other data the server | created entry. If the entry is present in the response body then it | |||
| chooses to reveal. This must contain enough information to enable a | MUST conform to the same constraints listed for responses to a GET on | |||
| client to issue a subsequent PUT to this location. Note that the | an EditURI. User agents MUST NOT depend on the server returning a | |||
| server may chose to omit the content in the response, particularly if | response body. If the server does return a response body then the | |||
| it is large. | user agents MUST NOT depend on the response body having a | |||
| content-type of 'application/atom+xml". Note that the server may | ||||
| choose to omit the content in the response, particularly if it is | ||||
| large. | ||||
| A 201 response MAY contain an ETag response header field indicating | ||||
| the current value of the entity tag for the requested variant just | ||||
| created. | ||||
| If the entry returned is subsequently changed the user agent can | ||||
| update the entry by submitting it via PUT to the EditURI. If an ETag | ||||
| was returned with the creation of the entry then the user agent | ||||
| SHOULD include an If-Match: header in the request that contains that | ||||
| ETag. | ||||
| 3.1.3.2 Response code 303 | 3.1.3.2 Response code 303 | |||
| The body of this response does not contain the filled-in Entry, but | The body of this response does not contain the filled-in Entry, but | |||
| the filled-in Entry can be found under a different URI and can be | the filled-in Entry can be found under a different URI and can be | |||
| retrieved using a GET method on that resource. The URI SHOULD be | retrieved using a GET method on that resource. The URI SHOULD be | |||
| given by the Location field in the response. | given by the Location field in the response. | |||
| 3.1.3.3 Response code 400 | 3.1.3.3 Response code 400 | |||
| Indicates that the server believes that the data sent constitutes an | Indicates that the server believes that the data sent constitutes an | |||
| invalid request. As an example, the data posted may not be | invalid request. As an example, the data posted may not be | |||
| well-formed XML. The server SHOULD include an entity containing an | well-formed XML. The server SHOULD include an entity containing an | |||
| explanation of the error situation, and whether it is a temporary or | explanation of the error situation, and whether it is a temporary or | |||
| permanent condition. | permanent condition. | |||
| 3.1.3.4 Response code 500 | 3.1.3.4 Response code 409 | |||
| The request contained a valid Atom Entry, but it conflicts with state | ||||
| on the server. The response SHOULD contain enough for information | ||||
| for the user to resolve the conflict. | ||||
| [[@@TBD@@ more about response body format]] | ||||
| 3.1.3.5 Response code 500 | ||||
| Indicates that the server detected an internal error on the server | Indicates that the server detected an internal error on the server | |||
| processing this request (such as an unhandled exception). The server | processing this request (such as an unhandled exception). The server | |||
| SHOULD include an entity containing an explanation of the error | SHOULD include an entity containing an explanation of the error | |||
| situation, and whether it is a temporary or permanent condition. | situation, and whether it is a temporary or permanent condition. | |||
| 3.2 EditURI | 3.2 EditURI | |||
| An EditURI is used to edit a single entry. Each entry that is | An EditURI is used to edit a single entry. Each entry that is | |||
| editable MUST have a unique URI. This URI supports both GET and PUT | editable MUST have a unique URI. This URI supports both GET and PUT | |||
| skipping to change at page 7, line 19 | skipping to change at page 7, line 45 | |||
| For editing a site Entry, the link tag is used. Note that a link tag | For editing a site Entry, the link tag is used. Note that a link tag | |||
| is used in both HTML and in the Atom format. A link tag of the | is used in both HTML and in the Atom format. A link tag of the | |||
| following format points to the EditURI for a site. In HTML, the link | following format points to the EditURI for a site. In HTML, the link | |||
| tags for editing are always found in the head element, while in Atom | tags for editing are always found in the head element, while in Atom | |||
| they may appear as children of the entry elements. | they may appear as children of the entry elements. | |||
| <link rel="service.edit" | <link rel="service.edit" | |||
| type="application/atom+xml" | type="application/atom+xml" | |||
| href="URI for Editing goes here" | href="URI for Editing goes here" | |||
| title="Readable desc of the entry."> | title="Readable desc of the entry." /> | |||
| Note: The critical characteristic of this link tag is the @rel of | Note: The critical characteristic of this link tag is the @rel of | |||
| 'service.edit' and the @type of 'application/atom+xml'. | 'service.edit' and the @type of 'application/atom+xml'. | |||
| 3.2.2 Request | 3.2.2 Request | |||
| A PUT request, and a GET response both contain a filled-in Atom | A PUT request, and a GET response both contain a filled-in Atom | |||
| entry, subject to the constraints in section Section 3.5. | entry, subject to the constraints in section Section 3.6. | |||
| The expected status codes from a GET are 200, 301, 307, and 500. | The expected status codes from a GET are 200, 301, 307, and 500. | |||
| 400, 404, and 410 are also possible. | 400, 404, and 410 are also possible. | |||
| The expected status codes from a PUT are 2xx, 301, 307, 500 and 501. | The expected status codes from a PUT are 2xx, 301, 307, 500 and 501. | |||
| 400, 404, and 410 are also possible. | 400, 404, 409, and 410 are also possible. | |||
| 3.2.2.1 Successful Requests | 3.2.2.1 Successful Requests | |||
| Servers MUST indicate successful GET requests with a 200 response. | Servers MUST indicate successful GET requests with a 200 response. | |||
| Servers MUST indicate successful PUT requests with a 2xx response. | Servers MUST indicate successful PUT requests with a 2xx response. | |||
| Servers MAY include additional information in the PUT response. | Servers MAY include additional information in the PUT response. | |||
| Clients SHOULD NOT expect any additional information in a PUT | Clients SHOULD NOT expect any additional information in a PUT | |||
| response. | response. | |||
| skipping to change at page 8, line 21 | skipping to change at page 8, line 45 | |||
| returned in the Location header. | returned in the Location header. | |||
| 3.2.2.4 Response code 401 | 3.2.2.4 Response code 401 | |||
| Indicates that the server believes that the data sent constitutes an | Indicates that the server believes that the data sent constitutes an | |||
| invalid request. As an example, the data posted may not be | invalid request. As an example, the data posted may not be | |||
| well-formed XML. The server SHOULD include an entity containing an | well-formed XML. The server SHOULD include an entity containing an | |||
| explanation of the error situation, and whether it is a temporary or | explanation of the error situation, and whether it is a temporary or | |||
| permanent condition. | permanent condition. | |||
| 3.2.2.5 Response code 410 | 3.2.2.5 Response code 409 | |||
| The request contained a valid Atom Entry, but it conflicts with the | ||||
| state of the resource, or other state on the server. | ||||
| For example, a server could signal that the client has erred in this | ||||
| manner if it receives a request containing an atom:id element whose | ||||
| value differs from that of the resource found at the requested URI. | ||||
| The response SHOULD contain enough for information for the user to | ||||
| resolve the conflict. | ||||
| [[@@TBD@@ more about response body format ]] | ||||
| 3.2.2.6 Response code 410 | ||||
| Indicates that the requested resource is gone permanently. The | Indicates that the requested resource is gone permanently. The | |||
| client SHOULD NOT repeat the request again. | client SHOULD NOT repeat the request. | |||
| 3.2.2.6 Response code 500 | 3.2.2.7 Response code 500 | |||
| Indicates that the server detected an internal error on the server | Indicates that the server detected an internal error on the server | |||
| processing this request (such as an unhandled exception). The server | processing this request (such as an unhandled exception). The server | |||
| SHOULD include an entity containing an explanation of the error | SHOULD include an entity containing an explanation of the error | |||
| situation, and whether it is a temporary or permanent condition. | situation, and whether it is a temporary or permanent condition. | |||
| 3.3 FeedURI | 3.3 FeedURI | |||
| The FeedURI is used to retrieve a representation in Atom format. | The FeedURI is used to retrieve a representation in Atom format. | |||
| Note that this feed is different from a typical Atom feed in that it | Note that this feed is different from a typical Atom feed in that it | |||
| skipping to change at page 9, line 24 | skipping to change at page 10, line 14 | |||
| multiple link tags with rel="service.feed" and having differing title | multiple link tags with rel="service.feed" and having differing title | |||
| attributes that announce the kind of search results in that feed. | attributes that announce the kind of search results in that feed. | |||
| 3.3.1 Locating | 3.3.1 Locating | |||
| A link tag of the following format points to the FeedURI. | A link tag of the following format points to the FeedURI. | |||
| <link rel="service.feed" | <link rel="service.feed" | |||
| type="application/atom+xml" | type="application/atom+xml" | |||
| href="URI goes here" | href="URI goes here" | |||
| title="The name of the site."> | title="The name of the site." /> | |||
| 3.3.2 Request | 3.3.2 Request | |||
| The request is a simple GET. No other verbs are currently specified | The request is a simple GET. No other verbs are currently specified | |||
| for this URI. | for this URI. | |||
| 3.3.3 Response | 3.3.3 Response | |||
| The expected status codes from a GET are 200, 301, 307, and 500. | The expected status codes from a GET are 200, 301, 307, and 500. | |||
| 401, 404, and 410 are also possible. | 401, 404, and 410 are also possible. | |||
| skipping to change at page 9, line 48 | skipping to change at page 10, line 38 | |||
| The Feed has moved permanently, the new URI is given in the Location | The Feed has moved permanently, the new URI is given in the Location | |||
| header. The client SHOULD do a GET on the URI returned in the | header. The client SHOULD do a GET on the URI returned in the | |||
| Location header. | Location header. | |||
| 3.3.3.2 Response code 307 | 3.3.3.2 Response code 307 | |||
| The Feed has moved temporarily, the new URI is given in the Location | The Feed has moved temporarily, the new URI is given in the Location | |||
| header. The client SHOULD do a GET on the URI returned in the | header. The client SHOULD do a GET on the URI returned in the | |||
| Location header. | Location header. | |||
| 3.4 Link Tag | 3.4 ResourcePostURI | |||
| The ResourcePostURI is used to create new non-entry resources. The | ||||
| client POSTs a resource of the desired MIME type directly to this | ||||
| URI. | ||||
| 3.4.1 Locating | ||||
| For creating a new non-entry resource, the link tag is used. Note | ||||
| that a link tag is used in both HTML and in the Atom format. A link | ||||
| tag of the following format points to the ResourcePostURI for a site. | ||||
| In HTML the link tags are always found in the head element, while in | ||||
| Atom they may appear as children of the Feed and entry elements. | ||||
| <link rel="resource.post" href="URI for Resource Posting goes here" | ||||
| title="The name of the site."> | ||||
| 3.4.2 Request | ||||
| The request contains a resource, sent through a standard HTTP POST, | ||||
| e.g.: | ||||
| POST /_do/exampleblog/post_resource HTTP/1.1 | ||||
| Host: www.example.com | ||||
| Content-Type: image/jpeg | ||||
| Content-Length: nnn | ||||
| ...raw bytes of image go here... | ||||
| 3.4.3 Response | ||||
| The expected status codes from a POST are 201, 303, 400, 415, and | ||||
| 500. 401, 404, 409, and 410 are also possible. | ||||
| 3.4.3.1 Response code 201 | ||||
| The response MUST include a Location: header with the URI of the | ||||
| created resource, i.e. the URI used to retrieve the resource | ||||
| representation in a subsequent HTTP GET. The server SHOULD omit the | ||||
| content of the resource in the response, since it would be redundant | ||||
| to return it to the client. | ||||
| 3.4.3.2 Response code 303 | ||||
| Similar to 201 but no caching is allowed. The response MUST include | ||||
| a Location: header. | ||||
| 3.4.3.3 Response code 400 | ||||
| Indicates that the server believes that the data sent constitutes an | ||||
| invalid request. The server SHOULD include an entity containing an | ||||
| explanation of the error situation, and whether it is a temporary or | ||||
| permanent condition. | ||||
| 3.4.3.4 Response code 415 | ||||
| The MIME type of the request entity is not supported by the server | ||||
| for this resource. | ||||
| The response SHOULD contain enough for information for the user to | ||||
| resolve the conflict. | ||||
| [[@@TBD@@ more about response body format ]] | ||||
| 3.4.3.5 Response code 500 | ||||
| Indicates that the server detected an internal error on the server | ||||
| processing this request (such as an unhandled exception). A short | ||||
| description of the error will appear on the status line itself. A | ||||
| longer description will appear in the body. | ||||
| 3.5 Link Tag | ||||
| The link tag is used in both HTML and Atom formats. There are slight | The link tag is used in both HTML and Atom formats. There are slight | |||
| differences between the two usages. Here are the commonalities, | differences between the two usages. Here are the commonalities, | |||
| differences, and a list of well-known values for the rel attribute. | differences, and a list of well-known values for the rel attribute. | |||
| <http://www.w3.org/TR/html4/struct/links.html#edef-LINK> appears in | <http://www.w3.org/TR/html4/struct/links.html#edef-LINK> appears in | |||
| the 'head' of the document. The 'head' section only allows a linear | the 'head' of the document. The 'head' section only allows a linear | |||
| list of 'link' tags. The Atom format allows 'link' tags as children | list of 'link' tags. The Atom format allows 'link' tags as children | |||
| of both the 'feed' element and of the 'entry' element. Note that | of both the 'feed' element and of the 'entry' element. Note that | |||
| this gives the information present in the link tag more context. For | this gives the information present in the link tag more context. For | |||
| example ... @@ TBD @@ | example ... @@ TBD @@ | |||
| 3.4.1 rel | 3.5.1 rel | |||
| This attribute describes the relationship from the current document, | This attribute describes the relationship from the current document, | |||
| be it HTML or Atom, to the anchor specified by the href attribute. | be it HTML or Atom, to the anchor specified by the href attribute. | |||
| The value of this attribute is a space-separated list of link types. | The value of this attribute is a space-separated list of link types. | |||
| Note that these values are case insensitive. When used in concert | Note that these values are case insensitive. When used in concert | |||
| with type="application/atom+xml", the relations may be interpreted as | with type="application/atom+xml", the relations may be interpreted as | |||
| follows. | follows. | |||
| alternate: The URI in the href attribute points to an alternate | alternate: The URI in the href attribute points to an alternate | |||
| representation of the containing resource. | representation of the containing resource. | |||
| start: The Atom feed at the URI supplied in the href attribute | start: The Atom feed at the URI supplied in the href attribute | |||
| skipping to change at page 10, line 35 | skipping to change at page 12, line 50 | |||
| contains the next N entries in a linear sequence of entries. | contains the next N entries in a linear sequence of entries. | |||
| prev: The Atom feed at the URI supplied in the href attribute | prev: The Atom feed at the URI supplied in the href attribute | |||
| contains the previous N entries in a linear sequence of entries. | contains the previous N entries in a linear sequence of entries. | |||
| service.edit: The URI given in the href attribute is used to edit a | service.edit: The URI given in the href attribute is used to edit a | |||
| representation of the referred resource. | representation of the referred resource. | |||
| service.post: The URI in the href attribute is used to create new | service.post: The URI in the href attribute is used to create new | |||
| resources. | resources. | |||
| service.feed: The URI given in the href attribute is a starting point | service.feed: The URI given in the href attribute is a starting point | |||
| for navigating content and services. | for navigating content and services. | |||
| 3.4.2 href | 3.5.2 href | |||
| URI of the resource being described by this link element. | URI of the resource being described by this link element. | |||
| 3.4.3 title | 3.5.3 title | |||
| Offers advisory information about the link. Rendered to the user to | Offers advisory information about the link. Rendered to the user to | |||
| help them choose among a set of links with the same rel and type | help them choose among a set of links with the same rel and type | |||
| attributes. | attributes. | |||
| 3.4.4 type | 3.5.4 type | |||
| The content type of the resource available at the URI given in the | The content type of the resource available at the URI given in the | |||
| href attribute of the link element. Most of the link types in this | href attribute of the link element. Most of the link types in this | |||
| specification are on type 'application/atom+xml'. | specification are on type 'application/atom+xml'. | |||
| 3.5 Atom Request and Response Body Constraints | 3.6 Atom Request and Response Body Constraints | |||
| The Atom format is used as the representation of all the resources in | The Atom format is used as the representation of all the resources in | |||
| this specification. As it is used in differing contexts, there are | this specification. As it is used in differing contexts, there are | |||
| different constraints of which elements may be present, and how their | different constraints of which elements may be present, and how their | |||
| values should be interpreted. | values should be interpreted. | |||
| 3.5.1 id | 3.6.1 id | |||
| PostURI MUST NOT be present. | PostURI MUST NOT be present. | |||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. | PUT MUST be present. | |||
| 3.5.2 link | 3.6.2 link | |||
| PostURI MAY be present. Servers MAY use the information to determine | PostURI MAY be present. Servers MAY use the information to determine | |||
| the URI of the created resource. Relative URLs are to be | the URI of the created resource. Relative URLs are to be | |||
| interpreted relative to xml:base. | interpreted relative to xml:base. | |||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. | PUT MUST be present. | |||
| 3.5.3 title | 3.6.3 title | |||
| PostURI MUST be present. The element may be empty, to explicitly | PostURI MUST be present. The element may be empty, to explicitly | |||
| indicate "no title". Servers SHOULD NOT try to generate a title | indicate "no title". Servers SHOULD NOT try to generate a title | |||
| if one is not provided. The type attribute MAY be present, and if | if one is not provided. The type attribute MAY be present, and if | |||
| not it defaults to "text/plain". If present, it MUST represent a | not it defaults to "text/plain". If present, it MUST represent a | |||
| MIME type that the server supports. The mode attribute MAY be | MIME type that the server supports. The mode attribute MAY be | |||
| present. If not present, it defaults to "xml". If present, it | present. If not present, it defaults to "xml". If present, it | |||
| MUST be "xml", "base64", or "escaped". | MUST be "xml", "base64", or "escaped". | |||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. The element may be empty, to explicitly | PUT MUST be present. The element may be empty, to explicitly | |||
| indicate "no title". Servers SHOULD NOT try to generate a | indicate "no title". Servers SHOULD NOT try to generate a | |||
| title if one is not provided. | title if one is not provided. | |||
| 3.5.4 summary | 3.6.4 summary | |||
| PostURI MAY be present. If not present, the server is welcome to | PostURI MAY be present. If not present, the server is welcome to | |||
| produce its own summary. If present but empty, the server SHOULD | produce its own summary. If present but empty, the server SHOULD | |||
| NOT generate a summary of its own. The type attribute MAY be | NOT generate a summary of its own. The type attribute MAY be | |||
| present. If not, it defaults to "text/plain". If present, it | present. If not, it defaults to "text/plain". If present, it | |||
| must represent a MIME type that the server supports. The mode | must represent a MIME type that the server supports. The mode | |||
| attribute MAY be present and defaults to "xml". If present, it | attribute MAY be present and defaults to "xml". If present, it | |||
| must be "xml","base64", or "escaped". | must be "xml","base64", or "escaped". | |||
| FeedURI MAY be present. | FeedURI MAY be present. | |||
| EditURI | EditURI | |||
| GET MAY be present. | GET MAY be present. | |||
| PUT MAY be present. The element may be empty, to explicitly | PUT MAY be present. The element may be empty, to explicitly | |||
| indicate "no summary". Servers SHOULD NOT try to generate a | indicate "no summary". Servers SHOULD NOT try to generate a | |||
| title if one is not provided. | title if one is not provided. | |||
| 3.5.5 content | 3.6.5 content | |||
| PostURI MAY be present but may be empty, to explicitly indicate "no | PostURI MAY be present but may be empty, to explicitly indicate "no | |||
| content". The type attribute MAY be present, but defaults to | content". The type attribute MAY be present, but defaults to | |||
| "text/plain" if not present. It must represent a MIME type that | "text/plain" if not present. It must represent a MIME type that | |||
| the server supports. The MODE attribute may be present and | the server supports. The MODE attribute may be present and | |||
| defaults to "xml" if not present. It must be "xml","base64", or | defaults to "xml" if not present. It must be "xml","base64", or | |||
| "escaped". | "escaped". | |||
| FeedURI MAY be present. | FeedURI MAY be present. | |||
| EditURI | EditURI | |||
| GET MAY be present. | GET MAY be present. | |||
| PUT MAY be present. The element may be empty, to explicitly | PUT MAY be present. The element may be empty, to explicitly | |||
| indicate "no content". | indicate "no content". | |||
| 3.5.6 issued | 3.6.6 issued | |||
| PostURI MUST be present, but may be empty, in which case it signifies | PostURI MUST be present, but may be empty, in which case it signifies | |||
| "now" in the time zone of the server. | "now" in the time zone of the server. | |||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. Server policy determines if an updated time | PUT MUST be present. Server policy determines if an updated time | |||
| is accepted. | is accepted. | |||
| 3.5.7 modified | 3.6.7 modified | |||
| PostURI MUST NOT be present. | PostURI MUST NOT be present. | |||
| FeedURI MAY be present. | FeedURI MAY be present. | |||
| EditURI | EditURI | |||
| GET MAY be present. | GET MAY be present. | |||
| PUT MAY be present. The element may be empty, to explicitly | PUT MAY be present. The element may be empty, to explicitly | |||
| indicate that 'now' on the server time is to be used. | indicate that 'now' on the server time is to be used. | |||
| 3.5.8 created | 3.6.8 created | |||
| PostURI MAY be present. | PostURI MAY be present. | |||
| FeedURI MAY be present. | FeedURI MAY be present. | |||
| EditURI | EditURI | |||
| GET MAY be present. | GET MAY be present. | |||
| PUT MAY be present. The server may or may not accept an updated | PUT MAY be present. The server may or may not accept an updated | |||
| value. If the server does not allow updating the issued time | value. If the server does not allow updating the issued time | |||
| then any PUT request with a different issued value MUST be | then any PUT request with a different issued value MUST be | |||
| rejected. | rejected. | |||
| 3.5.9 author | 3.6.9 author | |||
| PostURI MAY be present. If not present, the server determines the | PostURI MAY be present. If not present, the server determines the | |||
| author. If present, and conflicting with valid values as | author. If present, and conflicting with valid values as | |||
| determined by the server, then the server may change the value of | determined by the server, then the server may change the value of | |||
| author. | author. | |||
| FeedURI MAY be present. | FeedURI MAY be present. | |||
| EditURI | EditURI | |||
| GET MAY be present. | GET MAY be present. | |||
| PUT MAY be present. | PUT MAY be present. | |||
| 3.5.10 contributor | 3.6.10 contributor | |||
| PostURI MAY be present. | PostURI MAY be present. | |||
| FeedURI MAY be present. | FeedURI MAY be present. | |||
| EditURI | EditURI | |||
| GET MAY be present. | GET MAY be present. | |||
| PUT MAY be present. | PUT MAY be present. | |||
| 3.5.11 generator | 3.6.11 generator | |||
| PostURI MUST be present and contain a URI. The value of the element | PostURI MUST be present and contain a URI. The value of the element | |||
| indicates the code base used to create this request. MUST also | indicates the code base used to create this request. MUST also | |||
| have an attribute 'version' with a version number. | have an attribute 'version' with a version number. | |||
| FeedURI MUST NOT be present. | FeedURI MUST NOT be present. | |||
| EditURI | EditURI | |||
| GET MUST NOT be present. | GET MUST NOT be present. | |||
| PUT MUST NOT be present. | PUT MUST NOT be present. | |||
| 3.6 Securing the Atom Protocol | 3.7 Securing the Atom Protocol | |||
| All instances of publishing Atom entries SHOULD be protected by | All instances of publishing Atom entries SHOULD be protected by | |||
| authentication to prevent posting or editing by unknown sources. | authentication to prevent posting or editing by unknown sources. | |||
| Atom servers and clients MUST support one of the following | Atom servers and clients MUST support one of the following | |||
| authentication mechanisms, and SHOULD support both. | authentication mechanisms, and SHOULD support both. | |||
| o HTTP Digest Authentication [RFC2617] | o HTTP Digest Authentication [RFC2617] | |||
| o [@@TBD@@ CGI Authentication ref] | o [@@TBD@@ CGI Authentication ref] | |||
| Atom servers and clients MAY support encryption of the Atom session | Atom servers and clients MAY support encryption of the Atom session | |||
| using TLS [RFC2246]. | using TLS [RFC2246]. | |||
| There are cases where an authentication mechanism may not be | There are cases where an authentication mechanism may not be | |||
| required, such as a publicly editable Wiki, or when using the PostURI | required, such as a publicly editable Wiki, or when using the PostURI | |||
| to post comments to a site that does not require authentication to | to post comments to a site that does not require authentication to | |||
| create comments. | create comments. | |||
| 3.6.1 [@@TBD@@ CGI Authentication] | 3.7.1 [@@TBD@@ CGI Authentication] | |||
| This authentication method is included as part of the protocol to | This authentication method is included as part of the protocol to | |||
| allow Atom servers and clients that cannot use HTTP Digest | allow Atom servers and clients that cannot use HTTP Digest | |||
| Authentication but where the user can both insert its own HTTP | Authentication but where the user can both insert its own HTTP | |||
| headers and create a CGI program to authenticate entries to the | headers and create a CGI program to authenticate entries to the | |||
| server. This scenario is common in environments where the user | server. This scenario is common in environments where the user | |||
| cannot control what services the server employs, but the user can | cannot control what services the server employs, but the user can | |||
| write their own HTTP services. | write their own HTTP services. | |||
| 4. Security Considerations | 4. Security Considerations | |||
| skipping to change at page 15, line 52 | skipping to change at page 18, line 15 | |||
| the 'introspection' file. 1. Creating a new entry 2. Finding an | the 'introspection' file. 1. Creating a new entry 2. Finding an | |||
| old entry 3. editing an old entry 4. commenting on a entry (via | old entry 3. editing an old entry 4. commenting on a entry (via | |||
| HTML and Atom) | HTML and Atom) | |||
| 7.2 Example for a wiki | 7.2 Example for a wiki | |||
| Fill this in like above but for a wiki. | Fill this in like above but for a wiki. | |||
| 8. Revision History | 8. Revision History | |||
| draft-ietf-atompub-protocol-02 - Incorporates Pace409Response, | ||||
| PacePostLocationMust, and PaceSimpleResourcePosting. | ||||
| draft-ietf-atompub-protocol-01 - Added in sections on Responses for | draft-ietf-atompub-protocol-01 - Added in sections on Responses for | |||
| the EditURI. Allow 2xx for response to EditURI PUTs. Elided all | the EditURI. Allow 2xx for response to EditURI PUTs. Elided all | |||
| mentions of WSSE. Started adding in some normative references. | mentions of WSSE. Started adding in some normative references. | |||
| Added the section "Securing the Atom Protocol". Clarified that it is | Added the section "Securing the Atom Protocol". Clarified that it is | |||
| possible that the PostURI and FeedURI could be the same URI. Cleaned | possible that the PostURI and FeedURI could be the same URI. Cleaned | |||
| up descriptions for Response codes 400 and 500. | up descriptions for Response codes 400 and 500. | |||
| Rev draft-ietf-atompub-protocol-00 - 5Jul2004 - Renamed the file and | Rev draft-ietf-atompub-protocol-00 - 5Jul2004 - Renamed the file and | |||
| re-titled the document to conform to IETF submission guidelines. | re-titled the document to conform to IETF submission guidelines. | |||
| Changed MIME type to match the one selected for the Atom format. | Changed MIME type to match the one selected for the Atom format. | |||
| skipping to change at page 17, line 24 | skipping to change at page 19, line 40 | |||
| example URIs are not normative. | example URIs are not normative. | |||
| 9 Normative References | 9 Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", | [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", | |||
| RFC 2246, January 1999. | RFC 2246, January 1999. | |||
| [RFC2396] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform | ||||
| Resource Identifiers (URI): Generic Syntax", RFC 2396, | ||||
| August 1998. | ||||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
| Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext | |||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
| Leach, P., Luotonen, A. and L. Stewart, "HTTP | Leach, P., Luotonen, A. and L. Stewart, "HTTP | |||
| Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
| RFC 2617, June 1999. | RFC 2617, June 1999. | |||
| Authors' Addresses | Authors' Addresses | |||
| End of changes. | ||||
This html diff was produced by rfcdiff 1.12, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ | ||||