| draft-reschke-http-status-308-05.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 February 14, 2012 | Category: Experimental October 2025 | |||
| Expires: August 17, 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-05 | ||||
| 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 August 17, 2012. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2025 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. Normative References . . . . . . . . . . . . . . . . . . . . . 5 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| Appendix A. Implementations (to be removed by RFC Editor | 8.1. Normative References . . . . . . . . . . . . . . . . . . 5 | |||
| before publication) . . . . . . . . . . . . . . . . . 6 | 8.2. Informative References . . . . . . . . . . . . . . . . . 6 | |||
| Appendix B. Change Log (to be removed by RFC Editor before | 8.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| publication) . . . . . . . . . . . . . . . . . . . . . 6 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| B.1. Since draft-reschke-http-status-308-00 . . . . . . . . . . 6 | ||||
| B.2. Since draft-reschke-http-status-308-01 . . . . . . . . . . 6 | ||||
| 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 | ||||
| Appendix C. Resolved issues (to be removed by RFC Editor | ||||
| before publication) . . . . . . . . . . . . . . . . . 7 | ||||
| C.1. missingconsiderations . . . . . . . . . . . . . . . . . . . 7 | ||||
| Appendix D. Open issues (to be removed by RFC Editor prior to | ||||
| publication) . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| D.1. edit . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 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.8 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 4.3 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 9.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) | ||||
| ([RFC7231], Section 6.4.2), except that it does not allow changing | ||||
| 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. | status code 300 is not problematic. Server implementers are advised | |||
| not to vary the status code based on characteristics of the request, | ||||
| such as the User-Agent header field ("User-Agent Sniffing") -- doing | ||||
| so usually results in code that is both hard to maintain and hard to | ||||
| debug and would also require special attention to caching (i.e., | ||||
| setting a "Vary" response header field, as defined in Section 7.1.4 | ||||
| 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. This can be used | when encountering an HTML <meta> refresh directive ([HTML]). This | |||
| 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 | |||
| Server response: | Server response: | |||
| HTTP/1.1 308 Permanent Redirect | HTTP/1.1 308 Permanent Redirect | |||
| Content-Type: text/html; charset=UTF-8 | Content-Type: text/html; charset=UTF-8 | |||
| skipping to change at page 5, line 8 ¶ | 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 11 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 Cyrus Daboo, Bjoern Hoehrmann, Subramanian | Furthermore, thanks to Ben Campbell, Cyrus Daboo, Eran Hammer-Lahav, | |||
| Moonesamy, and Peter Saint-Andre for feedback on this document. | Bjoern Hoehrmann, Subramanian Moonesamy, Peter Saint-Andre, and | |||
| Robert Sparks for feedback on this document. | ||||
| 8. Normative References | ||||
| [RFC2119] Bradner, S., "Key words for use in | ||||
| RFCs to Indicate Requirement | ||||
| Levels", BCP 14, RFC 2119, | ||||
| March 1997. | ||||
| [RFC3986] Berners-Lee, T., Fielding, R., and | ||||
| L. Masinter, "Uniform Resource | ||||
| Identifier (URI): Generic Syntax", | ||||
| STD 66, RFC 3986, January 2005. | ||||
| [draft-ietf-httpbis-p1-messaging] Fielding, R., Ed., Gettys, J., | ||||
| Mogul, J., Frystyk, H., Masinter, | ||||
| L., Leach, P., Berners-Lee, T., | ||||
| Lafon, Y., Ed., and J. Reschke, | ||||
| Ed., "HTTP/1.1, part 1: URIs, | ||||
| Connections, and Message Parsing", | ||||
| draft-ietf-httpbis-p1-messaging-18 | ||||
| (work in progress), January 2012. | ||||
| [draft-ietf-httpbis-p2-semantics] Fielding, R., Ed., Gettys, J., | ||||
| Mogul, J., Frystyk, H., Masinter, | ||||
| L., Leach, P., Berners-Lee, T., | ||||
| Lafon, Y., Ed., and J. Reschke, | ||||
| Ed., "HTTP/1.1, part 2: Message | ||||
| Semantics", | ||||
| draft-ietf-httpbis-p2-semantics-18 | ||||
| (work in progress), January 2012. | ||||
| [draft-ietf-httpbis-p6-cache] Fielding, R., Ed., Gettys, J., | ||||
| Mogul, J., Frystyk, H., Masinter, | ||||
| L., Leach, P., Berners-Lee, T., | ||||
| Lafon, Y., Ed., Nottingham, M., | ||||
| Ed., and J. Reschke, Ed., | ||||
| "HTTP/1.1, part 6: Caching", | ||||
| draft-ietf-httpbis-p6-cache-18 | ||||
| (work in progress), January 2012. | ||||
| [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: Feature requested in Bugzilla bug 714302 | ||||
| (<https://bugzilla.mozilla.org/show_bug.cgi?id=714302>), patch | ||||
| available. | ||||
| 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 | 8. References | |||
| Added and resolved issue "missingconsiderations". Added request | 8.1. Normative References | |||
| message to example. Updated the Safari implementation note. | ||||
| Appendix C. Resolved issues (to be removed by RFC Editor before | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| publication) | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| Issues that were either rejected or resolved in this version of this | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| document. | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3986>. | ||||
| C.1. missingconsiderations | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
| RFC 7230, DOI 10.17487/RFC7230, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7230>. | ||||
| In Section 3: | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | ||||
| DOI 10.17487/RFC7231, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7231>. | ||||
| Type: change | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
| RFC 7234, DOI 10.17487/RFC7234, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7234>. | ||||
| stpeter@stpeter.im (2012-02-10): According to HTTPbis Part 2, need to | 8.2. Informative References | |||
| explain the request conditions, interactions with response headers, | ||||
| and implications for caches. If certain default behavior is assumed, | ||||
| it would be good to make that explicit. | ||||
| Resolution (2012-02-13): Added missing caching considerations. | [HTML] Raggett, D., Le Hors, A., and I. Jacobs, "HTML 4.01 | |||
| Specification", W3C Recommendation REC-html401-19991224, | ||||
| December 1999, | ||||
| <http://www.w3.org/TR/1999/REC-html401-19991224>. | ||||
| 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. 38 change blocks. | ||||
| 196 lines changed or deleted | 127 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/ | ||||