Internet DRAFT - draft-montenegro-httpbis-http2-server-profiles

draft-montenegro-httpbis-http2-server-profiles



Network Working Group                                        R.Peon
Internet Draft                                               Google
Intended status: Standards Track                      G. Montenegro
Expires: March 2014                           Microsoft Corporation
                                                  September 4, 2013


                  Profiles for Initial Server Settings
           draft-montenegro-httpbis-http2-server-profiles-00


Status of this Memo

   This Internet-Draft is submitted to IETF in full conformance
   with the provisions of BCP 78 and BCP 79. This document may
   contain material from IETF Documents or IETF Contributions
   published or made publicly available before November 10, 2008.
   The person(s) controlling the copyright in some of this material
   may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards
   Process.  Without obtaining an adequate license from the
   person(s) controlling the copyright in such materials, this
   document may not be modified outside the IETF Standards Process,
   and derivative works of it may not be created outside the IETF
   Standards Process, except to format it for publication as an RFC
   or to translate it into languages other than English.

   Internet-Drafts are working documents of the Internet
   Engineering Task Force (IETF), its areas, and its working
   groups.  Note that other groups may also distribute working
   documents as Internet-Drafts.

   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."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on November, 2013.

Copyright

   Copyright (c) 2013 IETF Trust and the persons identified as the
   document authors. All rights reserved.
Peon, Montenegro et. al.                                   [Page 1]

Internet-Draft   Server Profiles for Initial Settings      May 2013


   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.

Abstract

   In HTTP/2.0, if running over TLS, the client is the first to
   transmit HTTP/2.0 frames on the new session. With its first
   transmission to the server, the client can already overrun some
   of the server settings and preferences, leading to failure
   conditions and unnecessary complexity. This document proposes a
   solution to this problem based on a very small set of server
   profiles for initial settings sent within the TLS handshake.

Table of Contents


   1. Introduction...................................................2
      1.1. Requirements Language.....................................3
   2. Definition of Server Profiles for Initial Settings.............3
   3. Usage..........................................................4
   4. Pros and Cons of Server Profiles...............................5
   5. Security Considerations........................................6
   6. IANA Considerations............................................6
   7. Acknowledgments................................................6
   8. References.....................................................7
      8.1. Normative References......................................7
      8.2. Informative References....................................7

1. Introduction

   In HTTP/2.0 [I-D.ietf-httpbis-http2] there is an issue with
   unknown startup state in the TLS case (for "HTTPS"): the client
   initiates the session by transmitting its SETTINGS and any
   requests it wishes. However, at this time, it has not yet heard
   the SETTINGS from the server, so the initial requests could
   overrun some of the server's preferences. However, if the server
   could somehow communicate its preferences to the client prior to
   the start of the HTTP/2.0 session, then the client will not
   overrun any of the server's preferences when it starts
   transmitting on the new session.


Peon, Montenegro, et. al.                                  [Page 2]

Internet-Draft   Server Profiles for Initial Settings      May 2013


   This documents proposes a profile-based approach, based on defining
   server profiles for initial settings sent by the server within the
   TLS handshake: a compact server profile vs a normal server profile.

   The profiles are communicated as part of the exchanged application-
   layer protocol names, precisely as supported already by ALPN.

   Of course, the compact profile is not limited to embedded/constrained
   servers. It could be used by a regular web server if it wishes to
   reduce its initial resource usage for new connections for whatever
   reason. These profiles are just means to communicate initial
   SETTINGS. These SETTINGS are no different from any other, and can be
   subsequently modified by another SETTINGS frames, per HTTP/2.0. For
   example, a server may use a compact profile for the beginning of a
   session, after which it may send an updated set of SETTINGS to the
   client, increasing the use of resources to match (or exceed) those
   used by the normal profile.

   A point bears repeating: this issue is only with server SETTINGS in
   the TLS case. The profiles are only for server initial SETTINGS. The
   client does not have this issue, as it starts the HTTP/2.0 session by
   sending its SETTINGS (within the connection header), so when the
   server gets a chance to initially transmit on the new session it is
   guaranteed to have received the client SETTINGS already. As an aside,
   in the HTTP non-TLS case (which is not the subject of this document),
   HTTP/2.0 already fixed that by allowing the client to send its
   settings in an HTTP/1.1 header (HTTP2-Settings).

1.1. Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
   NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described
   in RFC 2119 [RFC2119].



2. Definition of Server Profiles for Initial Settings

   There are two profiles for server initial settings: the compact
   server profile and the normal server profile.

   Profile 1 - constrained server profile:

     . Negotiation strings:
          . "H2c" for final HTTP/2.0 specification
          . "HTTP-draft-06/2.0c" for draft version -06

Peon, Montenegro, et. al.                                  [Page 3]

Internet-Draft   Server Profiles for Initial Settings      May 2013


          (Appending a "c" to the negotiation string denotes the
          "compact" profile.)
     . SETTINGS_MAX_CONCURRENT_STREAMS: value: 1
     . SETTINGS_INITIAL_WINDOW_SIZE: value: 2K
     . SETTINGS_FLOW_CONTROL_OPTIONS: 0 (flow control on)
     . SETTINGS_MAX_BUFFER_SIZE: 1K


   Profile 2 - normal server profile

     . Negotiation strings:
          . "H2" for final HTTP/2.0 specification
          . "HTTP-draft-06/2.0" for draft version -06
          (Unchanged string implies the web server profile)
     . SETTINGS_MAX_CONCURRENT_STREAMS: value: 100
     . SETTINGS_INITIAL_WINDOW_SIZE: value: 64K
     . SETTINGS_FLOW_CONTROL_OPTIONS: 0 (flow control on)
     . SETTINGS_MAX_BUFFER_SIZE: 4K

   These profiles are to be defined in the base HTTP/2.0 document, and
   the negotiation strings would be registered with IANA in the ALPN
   registry. Only the strings corresponding to the final HTTP/2.0
   specification are to be registered in IANA.

   Other experimental profiles could be defined for use in testing new
   features, without need to register them in IANA.



3. Usage

   The client uses ALPN to include the negotiation strings for both
   profiles: in the TLS client hello, the client includes both of
   these:

   Example 1 - Profiles based on final HTTP/2.0 specification:
       . H2c
       . H2

   Example 2 - Profiles based on draft versions of the HTTP/2.0
   specifications, e.g., for draft version -06, the client includes
   both of these:
       . HTTP-draft-06/2.0c
       . HTTP-draft-06/2.0

Peon, Montenegro, et. al.                                  [Page 4]

Internet-Draft   Server Profiles for Initial Settings      May 2013


   The server uses ALPN to respond with the negotiation string it
   selects. For example 1, to select the compact profile the server
   includes this in its Hello: "H2c". Alternatively, if the client had
   proposed draft -06 (Example 2), the server would respond with "HTTP-
   draft-04/2.0c".

   The client interprets the returned string and sets the SETTINGS for
   the server accordingly. The client can initiate the HTTP/2.0 session
   (beginning with the client's SETTINGS frame) and MUST respect the
   server SETTINGS.

   In examples above, the client sets the server SETTINGS per the
   compact server profile. Per usual HTTP/2.0 rules, either endpoint is
   free to adjust their preferences by sending additional SETTINGS
   frames.

   Upon receipt of the client's first transmission on the HTTP/2.0
   session, the server responds with its own SETTINGS frame, which can
   already supersede any SETTINGS set via the server profile. This is
   in keeping with HTTP/2.0 rules.


4. Pros and Cons of Server Profiles

   Server profiles for initial settings are not the only possible
   approach for the server to communicate its settings in advance of the
   HTTP/2.0 session. This section compares to the other alternative that
   has been discussed, namely, the option of augmenting the TLS
   handshake to allow embedding the server SETTINGS (e.g., as ancillary
   data to the application-layer protocol negotiation itself).

   Pros:

  . No need to modify TLS handshake any further. This is a HUGE
     benefit, considering that ALPN has entered working group last call
     in the TLS WG.
  . No need to engage TLS WG (less extraneous dependencies).
  . Simple to spec (once the profiles are agreed upon).
  . HTTP/2.0 only needs to define the strings augmented with the
     profiles and register those in the ALPN registry (as well as other
     HTTPbis registries that may be applicable).
  . This approach of profiling could be used to distinguish
     experimental from production-grade servers.


Peon, Montenegro, et. al.                                  [Page 5]

Internet-Draft   Server Profiles for Initial Settings      May 2013


  . As compared to attempting to define default values for the server
     settings, the profile approach mitigates this by not requiring ONE
     set of defaults that must work for every type of server (which we
     fruitlessly attempted before), but 2 sets of defaults depending on
     the server profile. Targeting a limited set of 2 profiles should
     make this manageable (normal web server vs compact/embedded
     server).


   Cons:

  . Increases the size of the client TLS Hello as each profile would
     imply a separate string per ALPN specs, e.g., "H2c" and "H2". Not
     a big concern as long as we limit it to, say, 2 profiles. At any
     rate, other TLS extensions are growing this anyway.

5. Security Considerations

   None.

6. IANA Considerations

   The negotiation strings must be registered with IANA's ALPN
   registry: Application Layer Protocol Negotiation protocol byte
   strings within the TLS section. This is not new, as HTTP/2.0 has
   to do this anyways. This proposal just gives a certain format to
   the strings that would ultimately be registered by HTTP/2.0. In
   particular, the compact server profile would be denoted by the
   string "H2c". The normal server profile would be denoted by the
   string "H2".

   Notice that in the interest of terseness, this proposal departs
   from the notation currently used in HTTP/2.0. Current HTTP/2.0
   would have the compact and normal server profiles be registered
   as "HTTP/2.0c" and "HTTP/2.0".



7. Acknowledgments

   Thanks to Mark Nottingham for useful discussions in this space.

   This document was prepared using 2-Word-v2.0.template.doc.




Peon, Montenegro, et. al.                                  [Page 6]

Internet-Draft   Server Profiles for Initial Settings      May 2013


8. References

8.1. Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [I-D.ietf-httpbis-http2]
              Belshe, M., Peon, R., Thomson, M., and A. Melnikov,
              "Hypertext Transfer Protocol version 2.0", draft-ietf-
              httpbis-http2 (work in progress), August 2013.


8.2. Informative References

   None.


Author's Addresses

   Roberto Peon
   Google, Inc

   Email: fenix@google.com


   Gabriel Montenegro
   Microsoft Corporation

   Phone:
   Email: gabriel.montenegro@microsoft.com
















Peon, Montenegro, et. al.                                  [Page 7]