| draft-nottingham-atompub-feed-history-11.txt | draft-nottingham-atompub-feed-history-rfc.txt | |||
|---|---|---|---|---|
| Network Working Group M. Nottingham | Network Working Group M. Nottingham | |||
| Request for Comments: 5005 August 2007 | ||||
| Intended status: Standards Track | Category: Standards Track | |||
| Expires: December 27, 2007 | ||||
| Feed Paging and Archiving | Feed Paging and Archiving | |||
| draft-nottingham-atompub-feed-history-11 | ||||
| Status of This Memo | Status of This Memo | |||
| By submitting this Internet-Draft, each author represents that any | This document specifies an Internet standards track protocol for the | |||
| applicable patent or other IPR claims of which he or she is aware | Internet community, and requests discussion and suggestions for | |||
| have been or will be disclosed, and any of which he or she becomes | improvements. Please refer to the current edition of the "Internet | |||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | Official Protocol Standards" (STD 1) for the standardization state | |||
| and status of this protocol. Distribution of this memo is unlimited. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF), its areas, and its working groups. Note that | ||||
| other groups may also distribute working documents as Internet- | ||||
| Drafts. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | ||||
| and may be updated, replaced, or obsoleted by other documents at any | ||||
| time. It is inappropriate to use Internet-Drafts as reference | ||||
| material or to cite them other than as "work in progress." | ||||
| The list of current Internet-Drafts can be accessed at | ||||
| http://www.ietf.org/ietf/1id-abstracts.txt. | ||||
| The list of Internet-Draft Shadow Directories can be accessed at | ||||
| http://www.ietf.org/shadow.html. | ||||
| This Internet-Draft will expire on December 27, 2007. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2007). | |||
| Abstract | Abstract | |||
| This specification defines three types of syndicated Web feeds that | This specification defines three types of syndicated Web feeds that | |||
| enable publication of entries across one or more feed documents. | enable publication of entries across one or more feed documents. | |||
| This includes "paged" feeds for piecemeal access, "archived" feeds | This includes "paged" feeds for piecemeal access, "archived" feeds | |||
| skipping to change at page 3, line 7 | skipping to change at page 3, line 7 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . . 11 | 7.1. Normative References . . . . . . . . . . . . . . . . . . . 11 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . . 11 | 7.2. Informative References . . . . . . . . . . . . . . . . . . 11 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 12 | |||
| Appendix B. Use in RSS 2.0 . . . . . . . . . . . . . . . . . . . 12 | Appendix B. Use in RSS 2.0 . . . . . . . . . . . . . . . . . . . 12 | |||
| 1. Introduction | 1. Introduction | |||
| Syndicated Web feeds (using such formats as Atom [1]) are often split | Syndicated Web feeds (using formats such as Atom [1]) are often split | |||
| up into multiple documents to save bandwidth, allow "sliding window" | into multiple documents to save bandwidth, allow "sliding window" | |||
| access, or for other purposes. | access, or for other purposes. | |||
| This specification formalizes two types of feeds that can span one or | This specification formalizes two types of feeds that can span one or | |||
| more feed documents; "paged" feeds and "archived" feeds. | more feed documents; "paged" feeds and "archived" feeds. | |||
| Additionally, it defines "complete" feeds to cover the case when a | Additionally, it defines "complete" feeds to cover the case when a | |||
| single feed document explicitly represents all of the feed's entries. | single feed document explicitly represents all of the feed's entries. | |||
| Each has different properties and trade-offs: | Each has different properties and trade-offs: | |||
| o Complete feeds contain the entire set of entries in one document, | o Complete feeds contain the entire set of entries in one document, | |||
| and can be useful when it isn't desirable to "remember" | and can be useful when it isn't desirable to "remember" | |||
| previously-seen entries. | previously-seen entries. | |||
| o Paged feeds split the entries among multiple temporary documents. | o Paged feeds split the entries among multiple temporary documents. | |||
| This can be useful when entries in the feed are not long-lived or | This can be useful when entries in the feed are not long-lived or | |||
| stable, and the client needs to access an arbitrary portion of | stable, and the client needs to access an arbitrary portion of | |||
| them, usually in close succession. | them, usually in close succession. | |||
| o Archived feeds split them among multiple permanent documents, and | o Archived feeds split the entries among multiple permanent | |||
| can be useful when entries are long-lived and it is important for | documents and can be useful when entries are long-lived, and it is | |||
| clients to see every one. | important for clients to see every one. | |||
| The semantics of a feed that combines these types is undefined by | The semantics of a feed that combines these types is undefined by | |||
| this specification. | this specification. | |||
| Although they refer to Atom normatively, the mechanisms described | Although they refer to Atom normatively, the mechanisms described | |||
| herein can be used with similar syndication formats; see Appendix B | herein can be used with similar syndication formats; see Appendix B | |||
| for one such use. | for one such use. | |||
| 1.1. Notational Conventions | 1.1. Notational Conventions | |||
| skipping to change at page 4, line 8 | skipping to change at page 4, line 8 | |||
| 1.2. Terminology | 1.2. Terminology | |||
| In this specification, "feed document" refers to an Atom Feed | In this specification, "feed document" refers to an Atom Feed | |||
| Document or similar syndication instance document. It may contain | Document or similar syndication instance document. It may contain | |||
| any number of entries, and may or may not be a complete | any number of entries, and may or may not be a complete | |||
| representation of the logical feed. | representation of the logical feed. | |||
| A "logical feed" is the complete set of entries associated with a | A "logical feed" is the complete set of entries associated with a | |||
| feed (as contrasted with a feed document, which may contain a subset | feed (as contrasted with a feed document, which may contain a subset | |||
| of them). | of entries). | |||
| "Head section" refers to a document's feed-wide metadata container; | "Head section" refers to a document's feed-wide metadata container; | |||
| e.g., the child elements of the atom:feed element in an Atom Feed | e.g., the child elements of the atom:feed element in an Atom Feed | |||
| Document. | Document. | |||
| This specification uses terms from the XML Infoset [4]. However, | This specification uses terms from the XML Infoset [4]. However, | |||
| this specification uses a shorthand; the phrase "Information Item" is | this specification uses a shorthand; the phrase "Information Item" is | |||
| omitted when naming Element Information Items. Therefore, when this | omitted when naming Element Information Items. Therefore, when this | |||
| specification uses the term "element," it is referring to an Element | specification uses the term "element," it is referring to an Element | |||
| Information Item in Infoset terms. | Information Item in Infoset terms. | |||
| skipping to change at page 4, line 33 | skipping to change at page 4, line 33 | |||
| for more information about specific values. | for more information about specific values. | |||
| Note that URI references in link relation values may be relative, and | Note that URI references in link relation values may be relative, and | |||
| when they are used they must be absolutised, as described in Section | when they are used they must be absolutised, as described in Section | |||
| 5.1 of [5]. | 5.1 of [5]. | |||
| 2. Complete Feeds | 2. Complete Feeds | |||
| A complete feed is a feed document that contains all of the entries | A complete feed is a feed document that contains all of the entries | |||
| of a logical feed; any entry not actually in the feed document SHOULD | of a logical feed; any entry not actually in the feed document SHOULD | |||
| NOT be considered to be part of that feed. | NOT be considered part of that feed. | |||
| For example, a feed that represents a ranking that varies over time | For example, a feed that represents a ranking that varies over time | |||
| (such as "Top Twenty Records" or "Most Popular Items") should not | (such as "Top Twenty Records" or "Most Popular Items") should not | |||
| have newer entries displayed alongside older ones. By marking this | have newer entries displayed alongside older ones. By marking this | |||
| type feeds as complete, old entries are discarded when it is | feed as complete, old entries are discarded when it is refreshed. | |||
| refreshed. | ||||
| The fh:complete element, when present in a feed's head section, | The fh:complete element, when present in a feed's head section, | |||
| indicates that the feed document it occurs in is a complete | indicates that the feed document it occurs in is a complete | |||
| representation of the logical feed's entries. It is an empty | representation of the logical feed's entries. It is an empty | |||
| element; this specification does not define any content for it. | element; this specification does not define any content for it. | |||
| Example: Atom-formatted Complete Feed | Example: Atom-formatted Complete Feed | |||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | |||
| <feed xmlns="http://www.w3.org/2005/Atom" | <feed xmlns="http://www.w3.org/2005/Atom" | |||
| skipping to change at page 5, line 37 | skipping to change at page 5, line 37 | |||
| </entry> | </entry> | |||
| </feed> | </feed> | |||
| This specification does not address duplicate entries in complete | This specification does not address duplicate entries in complete | |||
| feeds. | feeds. | |||
| 3. Paged Feeds | 3. Paged Feeds | |||
| A paged feed is a set of linked feed documents that together contain | A paged feed is a set of linked feed documents that together contain | |||
| the entries of a logical feed, without any guarantees about the | the entries of a logical feed, without any guarantees about the | |||
| stability of the documents' contents. | stability of each document's contents. | |||
| Paged feeds are lossy; that is, it is not possible to guarantee that | Paged feeds are lossy; that is, it is not possible to guarantee that | |||
| clients will be able to reconstruct the contents of the logical feed | clients will be able to reconstruct the contents of the logical feed | |||
| at a particular time. Entries may be added or changed as the pages | at a particular time. Entries may be added or changed as the pages | |||
| of the feed are accessed, without the client becoming aware of them. | of the feed are accessed, without the client becoming aware of them. | |||
| Therefore, clients SHOULD NOT present paged feeds as coherent or | Therefore, clients SHOULD NOT present paged feeds as coherent or | |||
| complete, or make assumptions to that effect. | complete, or make assumptions to that effect. | |||
| Paged feeds can be useful when the number of entries is very large, | Paged feeds can be useful when the number of entries is very large, | |||
| skipping to change at page 9, line 20 | skipping to change at page 9, line 20 | |||
| is the most recent complete archive; although another archive | is the most recent complete archive; although another archive | |||
| ("2003/12") may be under construction, it would be an error to link | ("2003/12") may be under construction, it would be an error to link | |||
| to it before completion. | to it before completion. | |||
| 4.1. Publishing Archived Feeds | 4.1. Publishing Archived Feeds | |||
| The requirement that archive documents be stable allows clients to | The requirement that archive documents be stable allows clients to | |||
| safely assume that if they have retrieved one in the past, it will | safely assume that if they have retrieved one in the past, it will | |||
| not meaningfully change in the future. As a result, if an archive | not meaningfully change in the future. As a result, if an archive | |||
| document's contents are changed, some clients may not become aware of | document's contents are changed, some clients may not become aware of | |||
| it. | the changes. | |||
| Therefore, if a publisher requires a change to be visible to all | Therefore, if a publisher requires a change to be visible to all | |||
| users (e.g., correcting factual errors), they should consider | users (e.g., correcting factual errors), they should consider | |||
| publishing the revised entry in the subscription document, in | publishing the revised entry in the subscription document, in | |||
| addition to (or instead of) the appropriate archive document. | addition to (or instead of) the appropriate archive document. | |||
| Conversely, unimportant changes (e.g., spelling corrections) might be | Conversely, unimportant changes (e.g., spelling corrections) might be | |||
| only effected in archive documents. | only effected in archive documents. | |||
| Publishers SHOULD construct their feed documents in such a way as to | Publishers SHOULD construct their feed documents in such a way as to | |||
| make duplicate removal unambiguous (see Section 4.2). | make duplicate removal unambiguous (see Section 4.2). | |||
| Publishers are not required to make all archive documents available; | Publishers are not required to make all archive documents available; | |||
| they may refuse to serve (e.g., with HTTP status code 403 or 410), or | they may refuse to serve (e.g., with HTTP status code 403 or 410) or | |||
| be unable to serve (e.g., with HTTP status code 404) an archive | be unable to serve (e.g., with HTTP status code 404) an archive | |||
| document. | document. | |||
| 4.2. Consuming Archived Feeds | 4.2. Consuming Archived Feeds | |||
| Typically, clients will "subscribe" to an archived feed by polling | Typically, clients will "subscribe" to an archived feed by polling | |||
| the subscription document for recent changes. If URI contained in | the subscription document for recent changes. If a URI contained in | |||
| the prev-archive link relation has not been processed in the past, | the prev-archive link relation has not been processed in the past, | |||
| the client can "catch up" with any missed entries by dereferencing it | the client can "catch up" with any missed entries by dereferencing it | |||
| and adding the contained entries to the logical feed. This process | and adding the contained entries to the logical feed. This process | |||
| should be repeated recursively until the client encounters a prev- | should be repeated recursively until the client encounters a prev- | |||
| archive link relation that has been processed, the end of the archive | archive link relation that has been processed (the end of the archive | |||
| is indicated by a missing prev-archive link relation, or an error is | is indicated by a missing prev-archive link relation) or an error is | |||
| encountered. | encountered. | |||
| If duplicate entries are found, clients SHOULD consider only the most | If duplicate entries are found, clients SHOULD consider only the most | |||
| recently updated entry to be part of the logical feed. If duplicate | recently updated entry to be part of the logical feed. If duplicate | |||
| entries have the same update time-stamp, or none is available, the | entries have the same update time-stamp, or no time-stamps are | |||
| entry sourced from the most recently updated feed document SHOULD | available, the entry sourced from the most recently updated feed | |||
| replace all other duplicates of that entry. | document SHOULD replace all other duplicates of that entry. | |||
| In Atom-formatted archived feeds, two entries are duplicates if they | In Atom-formatted archived feeds, two entries are duplicates if they | |||
| have the same atom:id element. The update time of an entry is | have the same atom:id element. The update time of an entry is | |||
| determined by its atom:updated element, and likewise the update time | determined by its atom:updated element, and likewise the update time | |||
| of a feed document is determined by its feed-level atom:updated | of a feed document is determined by its feed-level atom:updated | |||
| element. | element. | |||
| Clients SHOULD warn users when they are not able to reconstruct the | Clients SHOULD warn users when they are not able to reconstruct the | |||
| entire logical feed (e.g., by alerting the user that an archive | entire logical feed (e.g., by alerting the user that an archive | |||
| document is unavailable, or displaying pseudo-entries that inform the | document is unavailable, or displaying pseudo-entries that inform the | |||
| user that some entries may be missing). | user that some entries may be missing). | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| This specification defines the following new relations, to be added | This specification defines the following new relations that have been | |||
| to the Link Relations registry: | added to the Link Relations registry: | |||
| o Attribute Value: prev-archive | o Attribute Value: prev-archive | |||
| o Description: A URI that refers to the immediately | o Description: A URI that refers to the immediately | |||
| preceding archive document. | preceding archive document. | |||
| o Expected display characteristics: none | o Expected display characteristics: none | |||
| o Security considerations: See [ this document ] | o Security considerations: See [RFC5005] | |||
| o Attribute Value: next-archive | o Attribute Value: next-archive | |||
| o Description: A URI that refers to the immediately | o Description: A URI that refers to the immediately | |||
| following archive document. | following archive document. | |||
| o Expected display characteristics: none | o Expected display characteristics: none | |||
| o Security considerations: See [ this document ] | o Security considerations: See [RFC5005] | |||
| Additionally, the "previous," "next" and "current" link relations | Additionally, the "previous," "next", and "current" link relations | |||
| should be updated to refer to this document. | should be updated to refer to this document. | |||
| 6. Security Considerations | 6. Security Considerations | |||
| Feeds using this mechanism have the same security considerations as | Feeds using this mechanism have the same security considerations as | |||
| Atom [1]. Encryption and authentication security services can be | Atom [1]. Encryption and authentication security services can be | |||
| obtained by encrypting and/or signing the feed, as described in [1], | obtained by encrypting and/or signing the feed, as described in [1], | |||
| and may also be obtained through channel-based mechanisms (e.g., TLS | and may also be obtained through channel-based mechanisms (e.g., TLS | |||
| [6], HTTP authentication [7]) and/or transport (e.g., IPSec [8]). | [6], HTTP authentication [7]) and/or transport (e.g., IPsec [8]). | |||
| Feeds using these mechanisms could be crafted in such a way as to | Feeds using these mechanisms could be crafted in such a way as to | |||
| cause a client to initiate excessive (or even an unending sequence | cause a client to initiate excessive (or even an unending sequence | |||
| of) network requests, causing denial of service (either to the | of) network requests, causing denial of service (either to the | |||
| client, the target server, and/or intervening networks). Clients can | client, the target server, and/or intervening networks). Clients can | |||
| mitigate this risk by requiring user intervention after a certain | mitigate this risk by requiring user intervention after a certain | |||
| number of requests, or by limiting requests either according to a | number of requests, or by limiting requests either according to a | |||
| hard limit, or with heuristics. Servers can mitigate this risk by | hard limit, or with heuristics. Servers can mitigate this risk by | |||
| denying requests that they consider abusive (e.g., by closing the | denying requests that they consider abusive (e.g., by closing the | |||
| connection, or generating an error). | connection or generating an error). | |||
| Clients should be mindful of resource limits when storing feed | Clients should be mindful of resource limits when storing feed | |||
| documents. To reiterate, they are not required to always store or | documents. To reiterate, they are not required to always store or | |||
| reconstruct the feed when conforming to this specification; they only | reconstruct the feed when conforming to this specification; they only | |||
| need inform the user when the reconstructed feed is not complete. | need to inform the user when the reconstructed feed is not complete. | |||
| This specification does not define what it means when a logical | This specification does not define what it means when a logical | |||
| feed's component feed documents have different security mechanisms | feed's component feed documents have different security mechanisms | |||
| applied. | applied. | |||
| 7. References | 7. References | |||
| 7.1. Normative References | 7.1. Normative References | |||
| [1] Nottingham, M. and R. Sayre, "The Atom Syndication Format", | [1] Nottingham, M. and R. Sayre, "The Atom Syndication Format", | |||
| skipping to change at page 11, line 49 | skipping to change at page 11, line 49 | |||
| [6] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) | [6] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) | |||
| Protocol Version 1.1", RFC 4346, April 2006. | Protocol Version 1.1", RFC 4346, April 2006. | |||
| [7] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [7] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP Authentication: | Leach, P., Luotonen, A., and L. Stewart, "HTTP Authentication: | |||
| Basic and Digest Access Authentication", RFC 2617, June 1999. | Basic and Digest Access Authentication", RFC 2617, June 1999. | |||
| [8] Kent, S. and K. Seo, "Security Architecture for the Internet | [8] Kent, S. and K. Seo, "Security Architecture for the Internet | |||
| Protocol", RFC 4301, December 2005. | Protocol", RFC 4301, December 2005. | |||
| [9] Winer, D., "RSS 2.0 Specification", 2005. | [9] Winer, D., "RSS 2.0 Specification", 2005, | |||
| <http://www.rssboard.org/rss-specification>. | ||||
| Appendix A. Acknowledgements | Appendix A. Acknowledgements | |||
| The author would like to thank the following people for their | The author would like to thank the following people for their | |||
| contributions, comments and help: Danny Ayers, Thomas Broyer, Lisa | contributions, comments, and help: Danny Ayers, Thomas Broyer, Lisa | |||
| Dusseault, Stefan Eissing, David Hall, Bill de Hora, Vidya Narayanan, | Dusseault, Stefan Eissing, David Hall, Bill de Hora, Vidya Narayanan, | |||
| Aristotle Pagaltzis, John Panzer, Dave Pawson, Garrett Rooney, Robert | Aristotle Pagaltzis, John Panzer, Dave Pawson, Garrett Rooney, Robert | |||
| Sayre, James Snell, Henry Story, Franklin Tse. | Sayre, James Snell, Henry Story, and Franklin Tse. | |||
| Any errors herein remain the author's, not theirs. | Any errors herein remain the author's, not theirs. | |||
| Appendix B. Use in RSS 2.0 | Appendix B. Use in RSS 2.0 | |||
| As previously noted, while this specification's extensions are | As previously noted, while this specification's extensions are | |||
| described in terms of the Atom feed format, they are also useful in | described in terms of the Atom feed format, they are also useful in | |||
| similar formats. This informative appendix demonstrates how they can | similar formats. This informative appendix demonstrates how they can | |||
| be used in an RSS 2.0-formatted [9] feed. | be used in an RSS 2.0-formatted [9] feed. | |||
| End of changes. 24 change blocks. | ||||
| 55 lines changed or deleted | 36 lines changed or added | |||
This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||