rfc7238.txt | draft-ietf-httpbis-rfc7238bis-latest.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) J. Reschke | HTTP Working Group J. Reschke | |||
Request for Comments: 7238 greenbytes | Internet-Draft greenbytes | |||
Category: Experimental June 2014 | Obsoletes: 7238 (if approved) March 2015 | |||
ISSN: 2070-1721 | Intended status: Standards Track | |||
Expires: September 2, 2015 | ||||
The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) | The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) | |||
draft-ietf-httpbis-rfc7238bis-latest | ||||
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). | |||
Status of This Memo | Status of This Memo | |||
This document is not an Internet Standards Track specification; it is | This Internet-Draft is submitted in full conformance with the | |||
published for examination, experimental implementation, and | provisions of BCP 78 and BCP 79. | |||
evaluation. | ||||
This document defines an Experimental Protocol for the Internet | Internet-Drafts are working documents of the Internet Engineering | |||
community. This document is a product of the Internet Engineering | Task Force (IETF). Note that other groups may also distribute | |||
Task Force (IETF). It represents the consensus of the IETF | working documents as Internet-Drafts. The list of current Internet- | |||
community. It has received public review and has been approved for | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are a candidate for any level of | ||||
Internet Standard; see Section 2 of RFC 5741. | ||||
Information about the current status of this document, any errata, | Internet-Drafts are draft documents valid for a maximum of six months | |||
and how to provide feedback on it may be obtained at | and may be updated, replaced, or obsoleted by other documents at any | |||
http://www.rfc-editor.org/info/rfc7238. | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on September 2, 2015. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2015 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 | (http://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 . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
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 . . . . . . . . . . . . . . . . . . . 4 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . . 5 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . . 5 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 5 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 5 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 5 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 7.1. Normative References . . . . . . . . . . . . . . . . . . . 6 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 6 | 7.2. Informative References . . . . . . . . . . . . . . . . . . 6 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 6 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . . 6 | |||
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 6.4 of [RFC7231], which also | codes is summarized in Section 6.4 of [RFC7231], which also | |||
classifies the existing status codes into four categories. | classifies the existing 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 | |||
skipping to change at page 3, line 25 ¶ | skipping to change at page 3, line 25 ¶ | |||
+-------------------------------------------+-----------+-----------+ | +-------------------------------------------+-----------+-----------+ | |||
| | 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 6.4.7 of [RFC7231] states that HTTP does not define a | Section 6.4.7 of [RFC7231] states that it does not define a permanent | |||
permanent variant of status code 307; this specification adds the | variant of status code 307; this specification adds the status code | |||
status code 308, defining this missing variant (Section 3). | 308, defining this missing variant (Section 3). | |||
This specification contains no technical changes from the | ||||
Experimental RFC 7238, which it obsoletes. | ||||
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 "308 (Permanent Redirect)" status code indicates that the target | The "308 (Permanent Redirect)" status code indicates that the target | |||
skipping to change at page 4, line 4 ¶ | skipping to change at page 4, line 7 ¶ | |||
The server SHOULD generate a Location header field ([RFC7231], | The server SHOULD generate a Location header field ([RFC7231], | |||
Section 7.1.2) in the response containing a preferred URI reference | 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 | for the new permanent URI. The user agent MAY use the Location field | |||
value for automatic redirection. The server's response payload | value for automatic redirection. The server's response payload | |||
usually contains a short hypertext note with a hyperlink to the new | usually contains a short hypertext note with a hyperlink to the new | |||
URI(s). | URI(s). | |||
A 308 response is cacheable by default; i.e., unless otherwise | A 308 response is cacheable by default; i.e., unless otherwise | |||
indicated by the method definition or explicit cache controls (see | indicated by the method definition or explicit cache controls (see | |||
[RFC7234], Section 4.2.2). | [RFC7234], Section 4.2.2). | |||
Note: This status code is similar to 301 (Moved Permanently) | Note: This status code is similar to 301 (Moved Permanently) | |||
([RFC7231], Section 6.4.2), except that it does not allow changing | ([RFC7231], Section 6.4.2), except that it does not allow changing | |||
the request method from POST to GET. | the request method from POST to GET. | |||
4. Deployment Considerations | 4. Deployment Considerations | |||
Section 6 of [RFC7231] requires recipients to treat unknown 3xx | Section 6 of [RFC7231] requires recipients to treat unknown 3xx | |||
status codes the same way as status code 300 Multiple Choices | status codes the same way as status code 300 (Multiple Choices) | |||
([RFC7231], Section 6.4.1). Thus, servers will not be able to rely | ([RFC7231], Section 6.4.1). Thus, servers will not be able to rely | |||
on automatic redirection happening similar to status codes 301, 302, | on automatic redirection happening similar to status codes 301, 302, | |||
or 307. | or 307. | |||
Therefore, initial use of status code 308 will be restricted to cases | Therefore, the use of status code 308 is restricted to cases where | |||
where the server has sufficient confidence in the client's | the server has sufficient confidence in the client's understanding | |||
understanding the new code or when a fallback to the semantics of | the new code or when a fallback to the semantics of status code 300 | |||
status code 300 is not problematic. Server implementers are advised | is not problematic. Server implementers are advised not to vary the | |||
not to vary the status code based on characteristics of the request, | status code based on characteristics of the request, such as the | |||
such as the User-Agent header field ("User-Agent Sniffing") -- doing | User-Agent header field ("User-Agent Sniffing") -- doing so usually | |||
so usually results in code that is both hard to maintain and hard to | results in code that is both hard to maintain and hard to debug and | |||
debug and would also require special attention to caching (i.e., | would also require special attention to caching (i.e., setting a | |||
setting a "Vary" response header field, as defined in Section 7.1.4 | "Vary" response header field, as defined in Section 7.1.4 of | |||
of [RFC7231]). | [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], Section | |||
can be used as another fallback. For example: | 4.2.5.3). This 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 | |||
Location: http://example.com/new | Location: http://example.com/new | |||
Content-Length: 454 | Content-Length: 356 | |||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | <!DOCTYPE HTML> | |||
"http://www.w3.org/TR/html4/strict.dtd"> | ||||
<html> | <html> | |||
<head> | <head> | |||
<title>Permanent Redirect</title> | <title>Permanent Redirect</title> | |||
<meta http-equiv="refresh" | <meta http-equiv="refresh" | |||
content="0; url=http://example.com/new"> | content="0; url=http://example.com/new"> | |||
</head> | </head> | |||
<body> | <body> | |||
<p> | <p> | |||
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 9 of [RFC7231]). | 308 status code as well (see Section 9 of [RFC7231]). | |||
Unsecured communication over the Internet is subject to man-in-the- | ||||
middle modification of messages, including changing status codes or | ||||
redirect targets. Use of Transport Layer Security (TLS) is one way | ||||
to mitigate those attacks. See Section 9 of [RFC7230] for related | ||||
attacks on authority and message integrity. | ||||
6. IANA Considerations | 6. IANA Considerations | |||
The registration below has been added to the "Hypertext Transfer | The "Hypertext Transfer Protocol (HTTP) Status Code Registry" | |||
Protocol (HTTP) Status Code Registry" (defined in Section 8.2 of | (defined in Section 8.2 of [RFC7231] and located at | |||
[RFC7231] and located at | <http://www.iana.org/assignments/http-status-codes>) has been updated | |||
<http://www.iana.org/assignments/http-status-codes>): | to reference this specification. | |||
+-------+--------------------+---------------------------------+ | +-------+--------------------+---------------------------------+ | |||
| 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. References | |||
The definition for the new status code 308 reuses text from the | ||||
HTTP/1.1 definitions of status codes 301 and 307. | ||||
Furthermore, thanks to Ben Campbell, Cyrus Daboo, Eran Hammer-Lahav, | ||||
Bjoern Hoehrmann, Subramanian Moonesamy, Peter Saint-Andre, and | ||||
Robert Sparks for feedback on this document. | ||||
8. References | ||||
8.1. Normative References | 7.1. 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, | |||
<http://www.rfc-editor.org/info/rfc2119>. | ||||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, January 2005. | RFC 3986, January 2005, | |||
<http://www.rfc-editor.org/info/rfc3986>. | ||||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
RFC 7230, June 2014. | RFC 7230, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7230>. | ||||
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
June 2014. | June 2014, <http://www.rfc-editor.org/info/rfc7231>. | |||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
RFC 7234, June 2014. | RFC 7234, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7234>. | ||||
8.2. Informative References | 7.2. Informative References | |||
[HTML] Raggett, D., Le Hors, A., and I. Jacobs, "HTML 4.01 | [HTML] Hickson, I., Berjon, R., Faulkner, S., Leithead, T., Doyle | |||
Specification", W3C Recommendation REC-html401-19991224, | Navara, E., O'Connor, E., and S. Pfeiffer, "HTML5", W3C | |||
December 1999, | Recommendation REC-html5-20141028, October 2014, | |||
<http://www.w3.org/TR/1999/REC-html401-19991224>. | <http://www.w3.org/TR/2014/REC-html5-20141028/>. | |||
Latest version available at | Latest version available at <http://www.w3.org/TR/html5/>. | |||
<http://www.w3.org/TR/html401>. | ||||
Appendix A. Acknowledgements | ||||
The definition for the new status code 308 reuses text from the | ||||
HTTP/1.1 definitions of status codes 301 and 307. | ||||
Furthermore, thanks to Ben Campbell, Cyrus Daboo, Adrian Farrell, | ||||
Eran Hammer-Lahav, Bjoern Hoehrmann, Barry Leiba, Subramanian | ||||
Moonesamy, Kathleen Moriarty, Peter Saint-Andre, Robert Sparks, and | ||||
Roy Fielding for feedback on this document. | ||||
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. 26 change blocks. | ||||
69 lines changed or deleted | 81 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/ |