draft-reschke-http-status-308-07.txt | draft-reschke-http-status-308-latest.txt | |||
---|---|---|---|---|
Network Working Group J. Reschke | Internet Engineering Task Force (IETF) J. Reschke | |||
Internet-Draft greenbytes | Request for Comments: 7238 greenbytes | |||
Intended status: Experimental March 26, 2012 | Category: Experimental July 2024 | |||
Expires: September 27, 2012 | ISSN: 2070-1721 | |||
The Hypertext Transfer Protocol (HTTP) Status Code 308 (Permanent | The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) | |||
Redirect) | ||||
draft-reschke-http-status-308-07 | ||||
Abstract | Abstract | |||
This document specifies the additional HyperText Transfer Protocol | This document specifies the additional Hypertext Transfer Protocol | |||
(HTTP) Status Code 308 (Permanent Redirect). | (HTTP) status code 308 (Permanent Redirect). | |||
Editorial Note (To be removed by RFC Editor before publication) | Editorial Note (To be removed by RFC Editor before publication) | |||
Distribution of this document is unlimited. Although this is not a | Distribution of this document is unlimited. Although this is not a | |||
work item of the HTTPbis Working Group, comments should be sent to | work item of the HTTPbis Working Group, comments should be sent to | |||
the Hypertext Transfer Protocol (HTTP) mailing list at | the Hypertext Transfer Protocol (HTTP) mailing list at ietf-http- | |||
ietf-http-wg@w3.org [1], which may be joined by sending a message | wg@w3.org [1], which may be joined by sending a message with subject | |||
with subject "subscribe" to ietf-http-wg-request@w3.org [2]. | "subscribe" to ietf-http-wg-request@w3.org [2]. | |||
Discussions of the HTTPbis Working Group are archived at | Discussions of the HTTPbis Working Group are archived at | |||
<http://lists.w3.org/Archives/Public/ietf-http-wg/>. | <http://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
XML versions, latest edits, and the issues list for this document are | XML versions, latest edits, and the issues list for this document are | |||
available from | available from <http://greenbytes.de/tech/webdav/#draft-reschke-http- | |||
<http://greenbytes.de/tech/webdav/#draft-reschke-http-status-308>. | status-308>. | |||
Test cases related to redirection in general and the status code 308 | _This is a temporary document for the purpose of tracking the | |||
in particular can be found at | editorial changes made during the AUTH48 (RFC publication) phase._ | |||
<http://greenbytes.de/tech/tc/httpredirects/#l-308>. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document defines an Experimental Protocol for the Internet | |||
Task Force (IETF). Note that other groups may also distribute | community. This document is a product of the Internet Engineering | |||
working documents as Internet-Drafts. The list of current Internet- | Task Force (IETF). It represents the consensus of the IETF | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | community. It has received public review and has been approved for | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are candidates for any level of | ||||
Internet Standard; see Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc7238. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on September 27, 2012. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Notational Conventions . . . . . . . . . . . . . . . . . . . . 3 | 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 3 | |||
3. 308 Permanent Redirect . . . . . . . . . . . . . . . . . . . . 3 | 3. 308 Permanent Redirect . . . . . . . . . . . . . . . . . . . 3 | |||
4. Deployment Considerations . . . . . . . . . . . . . . . . . . . 4 | 4. Deployment Considerations . . . . . . . . . . . . . . . . . . 3 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . . 5 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 5 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 5 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 5 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 6 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 5 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 6 | 8.2. Informative References . . . . . . . . . . . . . . . . . 6 | |||
Appendix A. Implementations (to be removed by RFC Editor | 8.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
before publication) . . . . . . . . . . . . . . . . . 7 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
Appendix B. Change Log (to be removed by RFC Editor before | ||||
publication) . . . . . . . . . . . . . . . . . . . . . 7 | ||||
B.1. Since draft-reschke-http-status-308-00 . . . . . . . . . . 7 | ||||
B.2. Since draft-reschke-http-status-308-01 . . . . . . . . . . 7 | ||||
B.3. Since draft-reschke-http-status-308-02 . . . . . . . . . . 7 | ||||
B.4. Since draft-reschke-http-status-308-03 . . . . . . . . . . 7 | ||||
B.5. Since draft-reschke-http-status-308-04 . . . . . . . . . . 7 | ||||
B.6. Since draft-reschke-http-status-308-05 . . . . . . . . . . 8 | ||||
B.7. Since draft-reschke-http-status-308-06 . . . . . . . . . . 8 | ||||
Appendix C. Resolved issues (to be removed by RFC Editor | ||||
before publication) . . . . . . . . . . . . . . . . . 8 | ||||
C.1. consistency307 . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
C.2. sniffing . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
Appendix D. Open issues (to be removed by RFC Editor prior to | ||||
publication) . . . . . . . . . . . . . . . . . . . . . 8 | ||||
D.1. edit . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
1. Introduction | 1. Introduction | |||
HTTP defines a set of status codes for the purpose of redirecting a | HTTP defines a set of status codes for the purpose of redirecting a | |||
request to a different URI ([RFC3986]). The history of these status | request to a different URI ([RFC3986]). The history of these status | |||
codes is summarized in Section 7.3 of | codes is summarized in Section 6.4 of [RFC7231], which also | |||
[draft-ietf-httpbis-p2-semantics], which also classifies the existing | classifies the existing status codes into four categories. | |||
status codes into four categories. | ||||
The first of these categories contains the status codes 301 (Moved | The first of these categories contains the status codes 301 (Moved | |||
Permanently), 302 (Found), and 307 (Temporary Redirect), which can be | Permanently), 302 (Found), and 307 (Temporary Redirect), which can be | |||
classified as below: | classified as below: | |||
+-------------------------------------------+-----------+-----------+ | +-------------------------------------------+-----------+-----------+ | |||
| | Permanent | Temporary | | | | Permanent | Temporary | | |||
+-------------------------------------------+-----------+-----------+ | +-------------------------------------------+-----------+-----------+ | |||
| Allows changing the request method from | 301 | 302 | | | Allows changing the request method from | 301 | 302 | | |||
| POST to GET | | | | | POST to GET | | | | |||
| Does not allow changing the request | - | 307 | | | Does not allow changing the request | - | 307 | | |||
| method from POST to GET | | | | | method from POST to GET | | | | |||
+-------------------------------------------+-----------+-----------+ | +-------------------------------------------+-----------+-----------+ | |||
Section 7.3.7 of [draft-ietf-httpbis-p2-semantics] states that HTTP | Section 6.4.7 of [RFC7231] states that HTTP does not define a | |||
does not define a permanent variant of status code 307; this | permanent variant of status code 307; this specification adds the | |||
specification adds the status code 308, defining this missing variant | status code 308, defining this missing variant (Section 3). | |||
(Section 3). | ||||
2. Notational Conventions | 2. 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 | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
3. 308 Permanent Redirect | 3. 308 Permanent Redirect | |||
The target resource has been assigned a new permanent URI and any | The "308 (Permanent Redirect)" status code indicates that the target | |||
future references to this resource SHOULD use one of the returned | resource has been assigned a new permanent URI and any future | |||
URIs. Clients with link editing capabilities ought to automatically | references to this resource ought to use one of the enclosed URIs. | |||
re-link references to the effective request URI (Section 5.5 of | Clients with link editing capabilities ought to automatically re-link | |||
[draft-ietf-httpbis-p1-messaging]) to one or more of the new | references to the effective request URI (Section 5.5 of [RFC7230]) to | |||
references returned by the server, where possible. | one or more of the new references sent by the server, where possible. | |||
Caches MAY use a heuristic (see [draft-ietf-httpbis-p6-cache], | The server SHOULD generate a Location header field ([RFC7231], | |||
Section 2.3.1.1) to determine freshness for 308 responses. | Section 7.1.2) in the response containing a preferred URI reference | |||
for the new permanent URI. The user agent MAY use the Location field | ||||
value for automatic redirection. The server's response payload | ||||
usually contains a short hypertext note with a hyperlink to the new | ||||
URI(s). | ||||
The new permanent URI SHOULD be given by the Location field in the | A 308 response is cacheable by default; i.e., unless otherwise | |||
response ([draft-ietf-httpbis-p2-semantics], Section 10.5). A | indicated by the method definition or explicit cache controls (see | |||
response payload can contain a short hypertext note with a hyperlink | [RFC7234], Section 4.2.2). | |||
to the new URI(s). | ||||
Note: This status code is similar to 301 Moved Permanently | Note: This status code is similar to 301 (Moved Permanently) | |||
(Section 7.3.2 of [draft-ietf-httpbis-p2-semantics]), except that | ([RFC7231], Section 6.4.2), except that it does not allow changing | |||
it does not allow rewriting the request method from POST to GET. | the request method from POST to GET. | |||
4. Deployment Considerations | 4. Deployment Considerations | |||
Section 4 of [draft-ietf-httpbis-p2-semantics] requires recipients to | Section 6 of [RFC7231] requires recipients to treat unknown 3xx | |||
treat unknown 3xx status codes the same way as status code 300 | status codes the same way as status code 300 Multiple Choices | |||
Multiple Choices ([draft-ietf-httpbis-p2-semantics], Section 7.3.1). | ([RFC7231], Section 6.4.1). Thus, servers will not be able to rely | |||
Thus, servers will not be able to rely on automatic redirection | on automatic redirection happening similar to status codes 301, 302, | |||
happening similar to status codes 301, 302, or 307. | or 307. | |||
Therefore, initial use of status code 308 will be restricted to cases | Therefore, initial use of status code 308 will be restricted to cases | |||
where the server has sufficient confidence in the clients | where the server has sufficient confidence in the client's | |||
understanding the new code, or when a fallback to the semantics of | understanding the new code or when a fallback to the semantics of | |||
status code 300 is not problematic. Server implementers are advised | status code 300 is not problematic. Server implementers are advised | |||
not to vary the status code based on characteristics of the request, | not to vary the status code based on characteristics of the request, | |||
such as the User-Agent header field ("User-Agent Sniffing") -- doing | such as the User-Agent header field ("User-Agent Sniffing") -- doing | |||
so usually results in both hard to maintain and hard to debug code | so usually results in code that is both hard to maintain and hard to | |||
and would also require special attention to caching (i.e., setting a | debug and would also require special attention to caching (i.e., | |||
"Vary" response header field, as defined in Section 3.5 of | setting a "Vary" response header field, as defined in Section 7.1.4 | |||
[draft-ietf-httpbis-p6-cache]). | of [RFC7231]). | |||
Note that many existing HTML-based user agents will emulate a refresh | Note that many existing HTML-based user agents will emulate a refresh | |||
when encountering an HTML <meta> refresh directive ([HTML]). This | when encountering an HTML <meta> refresh directive ([HTML]). This | |||
can be used as another fallback. For example: | can be used as another fallback. For example: | |||
Client request: | Client request: | |||
GET / HTTP/1.1 | GET / HTTP/1.1 | |||
Host: example.com | Host: example.com | |||
skipping to change at page 5, line 32 ¶ | skipping to change at page 5, line 8 ¶ | |||
The document has been moved to | The document has been moved to | |||
<a href="http://example.com/new" | <a href="http://example.com/new" | |||
>http://example.com/new</a>. | >http://example.com/new</a>. | |||
</p> | </p> | |||
</body> | </body> | |||
</html> | </html> | |||
5. Security Considerations | 5. Security Considerations | |||
All security considerations that apply to HTTP redirects apply to the | All security considerations that apply to HTTP redirects apply to the | |||
308 status code as well (see Section 12 of | 308 status code as well (see Section 9 of [RFC7231]). | |||
[draft-ietf-httpbis-p2-semantics]). | ||||
6. IANA Considerations | 6. IANA Considerations | |||
The registration below shall be added to the HTTP Status Code | The registration below has been added to the "Hypertext Transfer | |||
Registry (defined in Section 4.2 of [draft-ietf-httpbis-p2-semantics] | Protocol (HTTP) Status Code Registry" (defined in Section 8.2 of | |||
and located at <http://www.iana.org/assignments/http-status-codes>): | [RFC7231] and located at <http://www.iana.org/assignments/http- | |||
status-codes>): | ||||
+-------+--------------------+---------------------------------+ | +-------+--------------------+----------------------------------+ | |||
| Value | Description | Reference | | | Value | Description | Reference | | |||
+-------+--------------------+---------------------------------+ | +-------+--------------------+----------------------------------+ | |||
| 308 | Permanent Redirect | Section 3 of this specification | | | 308 | Permanent Redirect | Section 3 of this specification | | |||
+-------+--------------------+---------------------------------+ | +-------+--------------------+----------------------------------+ | |||
7. Acknowledgements | 7. Acknowledgements | |||
The definition for the new status code 308 re-uses text from the | The definition for the new status code 308 reuses text from the | |||
HTTP/1.1 definitions of status codes 301 and 307. | HTTP/1.1 definitions of status codes 301 and 307. | |||
Furthermore, thanks to Ben Campbell, Cyrus Daboo, Eran Hammer-Lahav, | Furthermore, thanks to Ben Campbell, Cyrus Daboo, Eran Hammer-Lahav, | |||
Bjoern Hoehrmann, Subramanian Moonesamy, Peter Saint-Andre, and | Bjoern Hoehrmann, Subramanian Moonesamy, Peter Saint-Andre, and | |||
Robert Sparks for feedback on this document. | Robert Sparks for feedback on this document. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
RFCs to Indicate Requirement | Requirement Levels", BCP 14, RFC 2119, | |||
Levels", BCP 14, RFC 2119, | DOI 10.17487/RFC2119, March 1997, | |||
March 1997. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
L. Masinter, "Uniform Resource | Resource Identifier (URI): Generic Syntax", STD 66, | |||
Identifier (URI): Generic Syntax", | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
STD 66, RFC 3986, January 2005. | <https://www.rfc-editor.org/info/rfc3986>. | |||
[draft-ietf-httpbis-p1-messaging] Fielding, R., Ed., Lafon, Y., Ed., | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
and J. Reschke, Ed., "HTTP/1.1, | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
part 1: URIs, Connections, and | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
Message Parsing", | <https://www.rfc-editor.org/info/rfc7230>. | |||
draft-ietf-httpbis-p1-messaging-19 | ||||
(work in progress), March 2012. | ||||
[draft-ietf-httpbis-p2-semantics] Fielding, R., Ed., Lafon, Y., Ed., | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
and J. Reschke, Ed., "HTTP/1.1, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
part 2: Message Semantics", | DOI 10.17487/RFC7231, June 2014, | |||
draft-ietf-httpbis-p2-semantics-19 | <https://www.rfc-editor.org/info/rfc7231>. | |||
(work in progress), March 2012. | ||||
[draft-ietf-httpbis-p6-cache] Fielding, R., Ed., Lafon, Y., Ed., | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Nottingham, M., Ed., and J. | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
Reschke, Ed., "HTTP/1.1, part 6: | RFC 7234, DOI 10.17487/RFC7234, June 2014, | |||
Caching", | <https://www.rfc-editor.org/info/rfc7234>. | |||
draft-ietf-httpbis-p6-cache-19 | ||||
(work in progress), March 2012. | ||||
8.2. Informative References | 8.2. Informative References | |||
[HTML] Raggett, D., Le Hors, A., and I. | [HTML] Raggett, D., Le Hors, A., and I. Jacobs, "HTML 4.01 | |||
Jacobs, "HTML 4.01 Specification", | Specification", W3C Recommendation REC-html401-19991224, | |||
W3C Recommendation REC-html401- | December 1999, | |||
19991224, December 1999, <http:// | <http://www.w3.org/TR/1999/REC-html401-19991224>. | |||
www.w3.org/TR/1999/ | ||||
REC-html401-19991224>. | ||||
Latest version available at | ||||
<http://www.w3.org/TR/html401>. | ||||
URIs | ||||
[1] <mailto:ietf-http-wg@w3.org> | ||||
[2] <mailto:ietf-http-wg-request@w3.org?subject=subscribe> | ||||
Appendix A. Implementations (to be removed by RFC Editor before | ||||
publication) | ||||
Chrome: Feature requested in Chromium Issue 109012 | ||||
(<http://code.google.com/p/chromium/issues/detail?id=109012>). | ||||
Curl (the library): no change was needed (test case: | ||||
<https://github.com/bagder/curl/blob/master/tests/data/test1325>). | ||||
Firefox: now in "nightly" builds, scheduled for release in Firefox 14 | ||||
(see <https://bugzilla.mozilla.org/show_bug.cgi?id=714302>). | ||||
Safari: automatically redirects 3xx status codes when a Location | ||||
header field is present, but does not preserve the request method. | ||||
Appendix B. Change Log (to be removed by RFC Editor before publication) | ||||
B.1. Since draft-reschke-http-status-308-00 | ||||
Updated HTTPbis reference. Added Appendix A. Added and resolved | ||||
issue "refresh". | ||||
B.2. Since draft-reschke-http-status-308-01 | ||||
Added URI spec reference. | ||||
B.3. Since draft-reschke-http-status-308-02 | ||||
Tune HTML example. Expand "Implementations" section. Added and | ||||
resolved issue "respformat" (align with new proposed text for 307 in | ||||
HTTPbis P2). | ||||
B.4. Since draft-reschke-http-status-308-03 | ||||
Added and resolved issue "uaconfirm". | ||||
B.5. Since draft-reschke-http-status-308-04 | ||||
Added and resolved issue "missingconsiderations". Added request | ||||
message to example. Updated the Safari implementation note. | ||||
B.6. Since draft-reschke-http-status-308-05 | ||||
Add informative HTML reference. Update HTTPbis references. | ||||
B.7. Since draft-reschke-http-status-308-06 | ||||
Added and resolved issues "consistency307" and "sniffing". Updated | ||||
Firefox implementation status. | ||||
Appendix C. Resolved issues (to be removed by RFC Editor before | ||||
publication) | ||||
Issues that were either rejected or resolved in this version of this | ||||
document. | ||||
C.1. consistency307 | ||||
In Section 3: | ||||
Type: edit | ||||
ben@nostrum.com (2012-03-16): The 307 definition includes an explicit | ||||
post about that behavior not being allowed. Section 3 of this doc | ||||
does neither. | ||||
Resolution: Import (part of the) note from status code 307 | ||||
description. | ||||
C.2. sniffing | ||||
In Section 4: | ||||
Type: edit | ||||
rjsparks@nostrum.com (2012-03-15): Would it be worth adding something | ||||
to the draft explicitily discouraging UA sniffing? A reference to | ||||
something that already explores why that's not a good idea perhaps? | ||||
Resolution: Add advice not to attempt UA sniffing. | ||||
Appendix D. Open issues (to be removed by RFC Editor prior to | Latest version available at <http://www.w3.org/TR/ | |||
publication) | html401>. | |||
D.1. edit | 8.3. URIs | |||
Type: edit | [1] mailto:ietf-http-wg@w3.org | |||
julian.reschke@greenbytes.de (2011-04-15): Umbrella issue for | [2] mailto:ietf-http-wg-request@w3.org?subject=subscribe | |||
editorial fixes/enhancements. | ||||
Author's Address | Author's Address | |||
Julian F. Reschke | Julian F. Reschke | |||
greenbytes GmbH | greenbytes GmbH | |||
Hafenweg 16 | Hafenweg 16 | |||
Muenster, NW 48155 | Muenster, NW 48155 | |||
Germany | Germany | |||
EMail: julian.reschke@greenbytes.de | EMail: julian.reschke@greenbytes.de | |||
End of changes. 35 change blocks. | ||||
229 lines changed or deleted | 115 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |