| < draft-ietf-httpbis-proxy-status-04.txt | draft-ietf-httpbis-proxy-status-05.txt > | |||
|---|---|---|---|---|
| HTTP M. Nottingham | HTTP M. Nottingham | |||
| Internet-Draft Fastly | Internet-Draft Fastly | |||
| Intended status: Standards Track P. Sikora | Intended status: Standards Track P. Sikora | |||
| Expires: 13 August 2021 Google | Expires: 29 October 2021 Google | |||
| 9 February 2021 | 27 April 2021 | |||
| The Proxy-Status HTTP Response Header Field | The Proxy-Status HTTP Response Header Field | |||
| draft-ietf-httpbis-proxy-status-04 | draft-ietf-httpbis-proxy-status-05 | |||
| Abstract | Abstract | |||
| This document defines the Proxy-Status HTTP field to convey the | This document defines the Proxy-Status HTTP field to convey the | |||
| details of intermediary response handling, including generated | details of intermediary response handling, including generated | |||
| errors. | errors. | |||
| Note to Readers | Note to Readers | |||
| _RFC EDITOR: please remove this section before publication_ | _RFC EDITOR: please remove this section before publication_ | |||
| skipping to change at page 1, line 48 ¶ | skipping to change at page 1, line 48 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 13 August 2021. | This Internet-Draft will expire on 29 October 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 3, line 46 ¶ | skipping to change at page 3, line 46 ¶ | |||
| HTTP accommodates these types of errors with a few status codes; for | HTTP accommodates these types of errors with a few status codes; for | |||
| example, 502 Bad Gateway and 504 Gateway Timeout. However, | example, 502 Bad Gateway and 504 Gateway Timeout. However, | |||
| experience has shown that more information is necessary to aid | experience has shown that more information is necessary to aid | |||
| debugging and communicate what's happened to the client. | debugging and communicate what's happened to the client. | |||
| Additionally, intermediaries sometimes want to convey additional | Additionally, intermediaries sometimes want to convey additional | |||
| information about their handling of a response, even if they did not | information about their handling of a response, even if they did not | |||
| generate it. | generate it. | |||
| To enable these uses, Section 2 defines a new HTTP response field to | To enable these uses, Section 2 defines a new HTTP response field to | |||
| allow intermediaries to convey details of their handling of a | allow intermediaries to convey details of their handling of a | |||
| response, Section 2.1 enumerates the kind of information that can be | response. Section 2.1 enumerates the information that can be added | |||
| conveyed, and Section 2.3 defines a set of error types for use when a | to the field by intermediaries, which can be extended as per | |||
| proxy encounters an issue when obtaining a response for the request. | Section 2.2. Section 2.3 defines a set of error types for use when a | |||
| proxy encounters an issue when obtaining a response for the request; | ||||
| these can likewise be extended as per Section 2.4. | ||||
| 1.1. Notational Conventions | 1.1. Notational Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This specification uses Structured Fields | This specification uses Structured Fields [RFC8941] to specify syntax | |||
| [I-D.ietf-httpbis-header-structure] to specify syntax and parsing. | and parsing, and ABNF [RFC5234] as a shorthand for that syntax. The | |||
| The terms sf-list, sf-item, sf-string, sf-token, sf-integer and key | terms sf-list, sf-item, sf-string, sf-token, sf-integer and key refer | |||
| refer to the structured types defined therein. | to the structured types defined therein. | |||
| Note that in this specification, "proxy" is used to indicate both | Note that in this specification, "proxy" is used to indicate both | |||
| forward and reverse proxies, otherwise known as gateways. "Next hop" | forward and reverse proxies, otherwise known as gateways. "Next hop" | |||
| indicates the connection in the direction leading to the origin | indicates the connection in the direction leading to the origin | |||
| server for the request. | server for the request. | |||
| 2. The Proxy-Status HTTP Field | 2. The Proxy-Status HTTP Field | |||
| The Proxy-Status HTTP response field allows an intermediary to convey | The Proxy-Status HTTP response field allows an intermediary to convey | |||
| additional information about its handling of a response and its | additional information about its handling of a response and its | |||
| associated request. | associated request. | |||
| It is a List [I-D.ietf-httpbis-header-structure], Section 3.1: | It is a List ([RFC8941], Section 3.1): | |||
| Proxy-Status = sf-list | Proxy-Status = sf-list | |||
| Each member of the list represents an intermediary that has handled | Each member of the list represents an intermediary that has handled | |||
| the response. The first member of the list represents the | the response. The first member of the list represents the | |||
| intermediary closest to the origin server, and the last member of the | intermediary closest to the origin server, and the last member of the | |||
| list represents the intermediary closest to the user agent. | list represents the intermediary closest to the user agent. | |||
| For example: | For example: | |||
| skipping to change at page 5, line 38 ¶ | skipping to change at page 5, line 38 ¶ | |||
| Proxy-Status as a trailer field unless it has also sent a | Proxy-Status as a trailer field unless it has also sent a | |||
| corresponding Proxy-Status header field in the same message, so that | corresponding Proxy-Status header field in the same message, so that | |||
| the trailer value's ordering relative to other intermediaries is | the trailer value's ordering relative to other intermediaries is | |||
| preserved. | preserved. | |||
| Origin servers MUST NOT generate the Proxy-Status field. | Origin servers MUST NOT generate the Proxy-Status field. | |||
| 2.1. Proxy-Status Parameters | 2.1. Proxy-Status Parameters | |||
| This section lists parameters that can be used on the members of the | This section lists parameters that can be used on the members of the | |||
| Proxy-Status field. Unrecognised parameters SHOULD be ignored. | Proxy-Status field. Unrecognised parameters MUST be ignored. | |||
| 2.1.1. error | 2.1.1. error | |||
| The "error" parameter's value is an sf-token that is a Proxy Error | The "error" parameter's value is an sf-token that is a Proxy Error | |||
| Type. When present, it indicates that the proxy encountered an issue | Type. When present, it indicates that the proxy encountered an issue | |||
| when obtaining a response. | when obtaining a response. | |||
| Unless a Proxy Error Type specifies otherwise, the presences of error | Unless a Proxy Error Type specifies otherwise, the presences of error | |||
| often, but not always, indicates that response was generated by the | often, but not always, indicates that response was generated by the | |||
| proxy, not the origin server or any other upstream server. For | proxy, not the origin server or any other upstream server. For | |||
| skipping to change at page 7, line 39 ¶ | skipping to change at page 7, line 39 ¶ | |||
| Proxy-Status: ExampleProxy; received-status=200 | Proxy-Status: ExampleProxy; received-status=200 | |||
| 2.1.5. details | 2.1.5. details | |||
| The "details" parameter's value is an sf-string containing additional | The "details" parameter's value is an sf-string containing additional | |||
| information not captured anywhere else. This can include | information not captured anywhere else. This can include | |||
| implementation-specific or deployment-specific information. | implementation-specific or deployment-specific information. | |||
| For example: | For example: | |||
| Proxy-Status: ExampleProxy; error="http_protocol_error"; | Proxy-Status: ExampleProxy; error="http_protocol_error"; | |||
| details="Malformed response header - space before colon" | details="Malformed response header - space before colon" | |||
| 2.2. Defining New Proxy-Status Parameters | 2.2. Defining New Proxy-Status Parameters | |||
| New Proxy-Status Parameters can be defined by registering them in the | New Proxy-Status Parameters can be defined by registering them in the | |||
| HTTP Proxy-Status Parameters registry. | HTTP Proxy-Status Parameters registry. | |||
| Registration requests are reviewed and approved by a Designated | Registration requests are reviewed and approved by a Designated | |||
| Expert, as per [RFC8126], Section 4.5. A specification document is | Expert, as per [RFC8126], Section 4.5. A specification document is | |||
| appreciated, but not required. | appreciated, but not required. | |||
| skipping to change at page 9, line 10 ¶ | skipping to change at page 9, line 10 ¶ | |||
| * Name: dns_error | * Name: dns_error | |||
| * Description: The intermediary encountered a DNS error when trying | * Description: The intermediary encountered a DNS error when trying | |||
| to find an IP address for the next hop hostname. | to find an IP address for the next hop hostname. | |||
| * Extra Parameters: | * Extra Parameters: | |||
| - rcode: A sf-string conveying the DNS RCODE that indicates the | - rcode: A sf-string conveying the DNS RCODE that indicates the | |||
| error type. See [RFC8499], Section 3. | error type. See [RFC8499], Section 3. | |||
| - info-code: A sf-integer conveying the Extended DNS Error Code | ||||
| info-code. See [RFC8914]. | ||||
| * Recommended HTTP status code: 502 | * Recommended HTTP status code: 502 | |||
| 2.3.3. Destination Not Found | 2.3.3. Destination Not Found | |||
| * Name: destination_not_found | * Name: destination_not_found | |||
| * Description: The intermediary cannot determine the appropriate | * Description: The intermediary cannot determine the appropriate | |||
| next hop to use for this request; for example, it may not be | next hop to use for this request; for example, it may not be | |||
| configured. Note that this error is specific to gateways, which | configured. Note that this error is specific to gateways, which | |||
| typically require specific configuration to identify the "backend" | typically require specific configuration to identify the "backend" | |||
| skipping to change at page 20, line 20 ¶ | skipping to change at page 20, line 20 ¶ | |||
| Likewise, generation of all parameters is optional. | Likewise, generation of all parameters is optional. | |||
| 5. References | 5. References | |||
| 5.1. Normative References | 5.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, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/rfc/rfc2119>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/rfc/rfc8126>. | |||
| [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
| Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | |||
| January 2019, <https://www.rfc-editor.org/info/rfc8499>. | January 2019, <https://www.rfc-editor.org/rfc/rfc8499>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | |||
| [I-D.ietf-httpbis-header-structure] | [RFC8941] Nottingham, M. and P-H. Kamp, "Structured Field Values for | |||
| Nottingham, M. and P. Kamp, "Structured Field Values for | HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021, | |||
| HTTP", Work in Progress, Internet-Draft, draft-ietf- | <https://www.rfc-editor.org/rfc/rfc8941>. | |||
| httpbis-header-structure-19, 3 June 2020, | ||||
| <http://www.ietf.org/internet-drafts/draft-ietf-httpbis- | ||||
| header-structure-19.txt>. | ||||
| [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | |||
| "Transport Layer Security (TLS) Application-Layer Protocol | "Transport Layer Security (TLS) Application-Layer Protocol | |||
| Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | |||
| July 2014, <https://www.rfc-editor.org/info/rfc7301>. | July 2014, <https://www.rfc-editor.org/rfc/rfc7301>. | |||
| [RFC8914] Kumari, W., Hunt, E., Arends, R., Hardaker, W., and D. | ||||
| Lawrence, "Extended DNS Errors", RFC 8914, | ||||
| DOI 10.17487/RFC8914, October 2020, | ||||
| <https://www.rfc-editor.org/rfc/rfc8914>. | ||||
| 5.2. Informative References | 5.2. Informative References | |||
| [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | ||||
| Specifications: ABNF", STD 68, RFC 5234, | ||||
| DOI 10.17487/RFC5234, January 2008, | ||||
| <https://www.rfc-editor.org/rfc/rfc5234>. | ||||
| [RFC8586] Ludin, S., Nottingham, M., and N. Sullivan, "Loop | [RFC8586] Ludin, S., Nottingham, M., and N. Sullivan, "Loop | |||
| Detection in Content Delivery Networks (CDNs)", RFC 8586, | Detection in Content Delivery Networks (CDNs)", RFC 8586, | |||
| DOI 10.17487/RFC8586, April 2019, | DOI 10.17487/RFC8586, April 2019, | |||
| <https://www.rfc-editor.org/info/rfc8586>. | <https://www.rfc-editor.org/rfc/rfc8586>. | |||
| Authors' Addresses | Authors' Addresses | |||
| Mark Nottingham | Mark Nottingham | |||
| Fastly | Fastly | |||
| Prahran VIC | Prahran VIC | |||
| Australia | Australia | |||
| Email: mnot@mnot.net | Email: mnot@mnot.net | |||
| URI: https://www.mnot.net/ | URI: https://www.mnot.net/ | |||
| End of changes. 17 change blocks. | ||||
| 27 lines changed or deleted | 39 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/ | ||||