Network Working Group L. Pardue Internet-Draft April 1, 2018 Intended status: Informational Expires: October 2, 2018 HTTP Server *ush draft-pardue-server-ush-00 Abstract This document defines a suite of HTTP semantic extensions, named the *ush family, that propels HTTP towards new application use cases. HTTP/QUIC clients opt-in to features via an HTTP setting. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. 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." This Internet-Draft will expire on September 23, 2018. Copyright Notice Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Pardue Expires September 23, 2018 [Page 1] Internet-Draft HTTP Server *ush March 2018 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 2. The SETTINGS_ENABLE_CUSH Parameter . . . . . . . . . . . . . 3 3. The SETTINGS_ENABLE_DUSH Parameter . . . . . . . . . . . . . 3 4. The SETTINGS_ENABLE_GUSH Parameter . . . . . . . . . . . . . 3 5. The SETTINGS_ENABLE_HUSH Parameter . . . . . . . . . . . . . 4 6. The SETTINGS_ENABLE_KUSH Parameter . . . . . . . . . . . . . 4 7. The SETTINGS_ENABLE_LUSH Parameter . . . . . . . . . . . . . 4 8. The SETTINGS_ENABLE_MUSH Parameter . . . . . . . . . . . . . 4 9. The SETTINGS_ENABLE_RUSH Parameter . . . . . . . . . . . . . 5 10. The SETTINGS_ENABLE_TUSH Parameter . . . . . . . . . . . . . 5 11. The SETTINGS_ENABLE_BLUSH Parameter . . . . . . . . . . . . . 5 12. The SETTINGS_ENABLE_FLUSH Parameter . . . . . . . . . . . . . 5 13. The SETTINGS_ENABLE_PLUSH Parameter . . . . . . . . . . . . . 6 14. The SETTINGS_ENABLE_SLUSH Parameter . . . . . . . . . . . . . 6 15. The SETTINGS_ENABLE_SMUSH Parameter . . . . . . . . . . . . . 6 16. Security Considerations . . . . . . . . . . . . . . . . . . . 6 17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 17.1. Registration of SETTINGS_ENABLE_CUSH parameter . . . . . 6 17.2. Registration of SETTINGS_ENABLE_DUSH parameter . . . . . 7 17.3. Registration of SETTINGS_ENABLE_GUSH parameter . . . . . 7 17.4. Registration of SETTINGS_ENABLE_HUSH parameter . . . . . 7 17.5. Registration of SETTINGS_ENABLE_KUSH parameter . . . . . 7 17.6. Registration of SETTINGS_ENABLE_LUSH parameter . . . . . 8 17.7. Registration of SETTINGS_ENABLE_MUSH parameter . . . . . 8 17.8. Registration of SETTINGS_ENABLE_RUSH parameter . . . . . 8 17.9. Registration of SETTINGS_ENABLE_TUSH parameter . . . . . 8 17.10. Registration of SETTINGS_ENABLE_BLUSH parameter . . . . 9 17.11. Registration of SETTINGS_ENABLE_FLUSH parameter . . . . 9 17.12. Registration of SETTINGS_ENABLE_PLUSH parameter . . . . 9 17.13. Registration of SETTINGS_ENABLE_SLUSH parameter . . . . 10 17.14. Registration of SETTINGS_ENABLE_SMUSH parameter . . . . 10 18. Normative References . . . . . . . . . . . . . . . . . . . . 10 Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 11 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 11 1. Introduction HTTP server push is a feature of HTTP/2 [RFC7540] and HTTP/QUIC [QUIC-HTTP] that allows a server to pre-emptively send HTTP resources to a client in association with a previous client-initiated request. Server push broke ground for new HTTP semantics that offer new HTTP application use cases; this has kicked the door down for additional semantics. Pardue Expires September 23, 2018 [Page 2] Internet-Draft HTTP Server *ush March 2018 Much of the success of HTTP Server Push can be attributed to its syllable count and structure. The phrase rolls off the tongue with clear and concise meaning. To capitalise on this, the document defines a suite of HTTP semantic extensions with identical syllabic structure: the *ush family (pronounced aster-ush). Members of the *ush family enhance Server Push in various ways. For each member of the *ush family, this document adds a new HTTP/2 SETTINGS Parameter (to those defined by [RFC7540] Section X.Y.Z), and a new HTTP/QUIC SETTINGS Parameter to those defined by [QUIC-HTTP] Section 5.2.5. 1.1. Notational Conventions The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. 2. The SETTINGS_ENABLE_CUSH Parameter The new parameter is SETTINGS_ENABLE_CUSH (type = 0xfab01). This setting can be used to enable Server Cush, a more luxurious (cushy) form of Server Push. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "cattle class" Server Push is preferred. 3. The SETTINGS_ENABLE_DUSH Parameter The new parameter is SETTINGS_ENABLE_DUSH (type = 0xfab02). This setting can be used to enable Server Dush, a more violent form of Server Push. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "care bear" Server Push is preferred. 4. The SETTINGS_ENABLE_GUSH Parameter The new parameter is SETTINGS_ENABLE_GUSH (type = 0xfab03). This setting can be used to enable Server Gush, a mode of Server Push that supports sudden overflows. The value of the parameter is an integer Pardue Expires September 23, 2018 [Page 3] Internet-Draft HTTP Server *ush March 2018 that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "emotionally reserved" Server Push is preferred. 5. The SETTINGS_ENABLE_HUSH Parameter The new parameter is SETTINGS_ENABLE_HUSH (type = 0xfab04). This setting can be used to enable Server Hush, semantically equivalent to SETTINGS_ENABLE_PUSH but more polite. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that Server Push is not permitted. 6. The SETTINGS_ENABLE_KUSH Parameter The new parameter is SETTINGS_ENABLE_KUSH (type = 0xfab05). This setting can be used to enable Server Kush, a more mellow form of Server Push whose legality varies across territories. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "legal" Server Push is preferred. 7. The SETTINGS_ENABLE_LUSH Parameter The new parameter is SETTINGS_ENABLE_LUSH (type = 0xfab06). This setting can be used to enable Server Lush, which permits only the push of resources related to vegetation. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "eco-broad" Server Push is preferred. 8. The SETTINGS_ENABLE_MUSH Parameter The new parameter is SETTINGS_ENABLE_MUSH (type = 0xfab07). Mush has negative connotations so this setting is reserved and MUST NOT be used. Pardue Expires September 23, 2018 [Page 4] Internet-Draft HTTP Server *ush March 2018 9. The SETTINGS_ENABLE_RUSH Parameter The new parameter is SETTINGS_ENABLE_RUSH (type = 0xfab08). This setting can be used to enable Server Rush, a mode that enables a server to push resources more quickly. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "lazy" Server Rush is preferred. 10. The SETTINGS_ENABLE_TUSH Parameter The new parameter is SETTINGS_ENABLE_TUSH (type = 0xfab09). This setting can be used to enable Server Tush, a mode where the client will express dissaproval if the server takes too long to fulfill push promises. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "polite to the point" Server Push is preferred. 11. The SETTINGS_ENABLE_BLUSH Parameter The new parameter is SETTINGS_ENABLE_BLUSH (type = 0xfab0a). This setting can be used to enable Server Blush, a mode where the server should feel extra shame if it pushes resources that the client did not want. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "shameless" Server Push is preferred. 12. The SETTINGS_ENABLE_FLUSH Parameter The new parameter is SETTINGS_ENABLE_FLUSH (type = 0xfab0b). This setting can be used to enable Server Flush, a mode that respects the Coriolis effect across Northen and Southern hemispheres. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "universal frame of reference" Server Push is preferred. Pardue Expires September 23, 2018 [Page 5] Internet-Draft HTTP Server *ush March 2018 13. The SETTINGS_ENABLE_PLUSH Parameter The new parameter is SETTINGS_ENABLE_PLUSH (type = 0xfab0c). This setting is a synonym of SETTINGS_ENABLE_CUSH (Section 2). 14. The SETTINGS_ENABLE_SLUSH Parameter The new parameter is SETTINGS_ENABLE_SLUSH (type = 0xfab0d). This setting can be used to enable Server Slush, a mode that is overly sentimental. This is most appropriate when re-establishing connections to servers. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "cold hearted" Server Push is preferred. 15. The SETTINGS_ENABLE_SMUSH Parameter The new parameter is SETTINGS_ENABLE_SMUSH (type = 0xfab0e). This setting can be used to enable Server Mush, a logical union between SETTINGS_ENABLE_GUSH and SETTINGS_ENABLE_SLUSH. The value of the parameter is an integer that MUST be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error of type PROTOCOL_ERROR. The initial value is 0, which indicates that "emotionally reserved and cold hearted" Server Push is preferred. 16. Security Considerations There are no additional consideration beyond those presented in [RFC7540] and [QUIC-HTTP]. 17. IANA Considerations 17.1. Registration of SETTINGS_ENABLE_CUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_CUSH Code: 0xfab01 Specification: This document Pardue Expires September 23, 2018 [Page 6] Internet-Draft HTTP Server *ush March 2018 17.2. Registration of SETTINGS_ENABLE_DUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_DUSH Code: 0xfab02 Specification: This document 17.3. Registration of SETTINGS_ENABLE_GUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_GUSH Code: 0xfab03 Specification: This document 17.4. Registration of SETTINGS_ENABLE_HUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_HUSH Code: 0xfab04 Specification: This document 17.5. Registration of SETTINGS_ENABLE_KUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_KUSH Pardue Expires September 23, 2018 [Page 7] Internet-Draft HTTP Server *ush March 2018 Code: 0xfab05 Specification: This document 17.6. Registration of SETTINGS_ENABLE_LUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_LUSH Code: 0xfab06 Specification: This document 17.7. Registration of SETTINGS_ENABLE_MUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_MUSH Code: 0xfab07 Specification: This document 17.8. Registration of SETTINGS_ENABLE_RUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_RUSH Code: 0xfab08 Specification: This document 17.9. Registration of SETTINGS_ENABLE_TUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry Pardue Expires September 23, 2018 [Page 8] Internet-Draft HTTP Server *ush March 2018 for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_TUSH Code: 0xfab09 Specification: This document 17.10. Registration of SETTINGS_ENABLE_BLUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_BLUSH Code: 0xfab0a Specification: This document 17.11. Registration of SETTINGS_ENABLE_FLUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_FLUSH Code: 0xfab0b Specification: This document 17.12. Registration of SETTINGS_ENABLE_PLUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_PLUSH Code: 0xfab0c Specification: This document Pardue Expires September 23, 2018 [Page 9] Internet-Draft HTTP Server *ush March 2018 17.13. Registration of SETTINGS_ENABLE_SLUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_SLUSH Code: 0xfab0d Specification: This document 17.14. Registration of SETTINGS_ENABLE_SMUSH parameter This document establishes an entry for the HTTP/2 Settings Registry that is established by [RFC7540]. This document establishes an entry for the HTTP/QUIC Settings Registry that is established by [QUIC-HTTP]. Name: SETTINGS_ENABLE_SMUSH Code: 0xfab0e Specification: This document 18. Normative References [QUIC-HTTP] Bishop, M., Ed., "Hypertext Transfer Protocol (HTTP) over QUIC", draft-ietf-quic-http-08 (work in progress). [QUIC-TRANSPORT] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based Multiplexed and Secure Transport", draft-ietf-quic- transport-08 (work in progress). [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext Transfer Protocol Version 2 (HTTP/2)", RFC 7540, DOI 10.17487/RFC7540, May 2015, . Pardue Expires September 23, 2018 [Page 10] Internet-Draft HTTP Server *ush March 2018 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . Appendix A. Acknowledgements The entire Internet community. Author's Address Lucas Pardue Email: lucaspardue.24.7@gmail.com Pardue Expires September 23, 2018 [Page 11]