Internet DRAFT - draft-mcsherry-hafi

draft-mcsherry-hafi






Network Working Group                                      LJM. McSherry
Internet-Draft                                          December 4, 2012
Intended status: BCP
Expires: June 7, 2013


                  HTTP User Agent Feature Identifiers
                         draft-mcsherry-hafi-01

Abstract

   HTTP User Agent Feature Identifiers (HAFI, Hah-Fee) is a simple
   method for user agents, such as web browsers, to reveal the
   technologies that are supported by them.  These technologies include
   items such as Cascading Style Sheets, and various versions of HTML.

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 June 7, 2013.

Copyright Notice

   Copyright (c) 2012 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.




McSherry                  Expires June 7, 2013                  [Page 1]

Internet-Draft                    HAFI                     December 2012


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . 3
     1.1.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3
   2.  Implementation  . . . . . . . . . . . . . . . . . . . . . . . . 3
     2.1.  For User Agents . . . . . . . . . . . . . . . . . . . . . . 3
     2.2.  For Servers and Responders  . . . . . . . . . . . . . . . . 4
   3.  Features  . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
     3.1.  HTTP HAFI Header Example  . . . . . . . . . . . . . . . . . 5
   4.  Security Considerations . . . . . . . . . . . . . . . . . . . . 6
   5.  Normative References  . . . . . . . . . . . . . . . . . . . . . 6
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . . . 6







































McSherry                  Expires June 7, 2013                  [Page 2]

Internet-Draft                    HAFI                     December 2012


1.  Introduction

   HTTP User Agent Feature Identifiers (HAFI, Hah-Fee) is a simple
   method for user agents, such as web browsers, to reveal the
   technologies that are supported by them.  These technologies include
   items such as Cascading Style Sheets, and various versions of HTML.

   HAFI allows web developers to easily determine the technologies
   supported by user agents, and present content appropriate to those
   technologies.  HAFI is intended to prevent having to maintain a
   database of User Agent strings in order to determine functionality.

1.1.  Terminology

   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 [RFC2119].


2.  Implementation

   Identifiers are composed of a 32-bit unsigned integer, each bit in
   this representing a technology.  Identifiers are in a little-endian
   format, and setting a bit to high (one) shows that the technology is
   supported, while setting a bit to low (zero) shows that the
   technology is unsupported.

2.1.  For User Agents

   Identifiers are transmitted to the server via HTTP request headers,
   using a header entitled "HAFI".  This header will provide both the
   version of HAFI being adhered to, and the identifier itself.

   The format of the HAFI header is as shown below.  The order of the
   attributes, "version" and "features", is unimportant, but user agents
   are required to include both attributes.

   HAFI: version=1.0; features=82

   User agents should not misrepresent the technologies supported by
   them, and they should not add vendor-specific values to feature
   identifiers, as this would render HAFI pointless.

   User agents are also advised to set the value of reserved bits to
   low.






McSherry                  Expires June 7, 2013                  [Page 3]

Internet-Draft                    HAFI                     December 2012


2.1.1.  Notice on Listing CSS Support

   User agents should only list support for a version of CSS if the
   version is supported without vendor-specific prefixes.  For example,
   the prefix used with Mozilla Firefox is "-moz-".

   If the user agent supports CSS features only through vendor-specific
   prefixes, the appropriate version of CSS should not be shown as
   supported in the identifier provided by the user agent.

2.2.  For Servers and Responders

   When implementing HAFI into a server or responder, developers must
   include every version of HAFI to ensure backwards compatibility with
   older software that may not support the latest versions of HAFI.

   Servers and responders must not attempt to parse any bits that are
   listed as reserved in the version of HAFI presented by the user
   agent.  While user agents are recommended not to set any reserved
   bits to high, there is no guarantee that all implementing user agents
   will do this.

   If the presented version of HAFI is a version that is newer than the
   most recent version implemented in a server or responder, servers and
   responders should attempt to parse identifiers with the most recent
   version available.

   If the presented version is invalid (e.g. "version=1-t!"), servers
   and responders should not attempt to parse the features, and are
   recommended to respond with the HTTP 400 status code (Bad Request).


3.  Features

   Below is a table listing the features that can be represented in the
   current version of HAFI.  Developers are reminded that features
   should be presented in a little-endian format, and that reserved bits
   should be set to low (zero).













McSherry                  Expires June 7, 2013                  [Page 4]

Internet-Draft                    HAFI                     December 2012


                +--------+--------------------------------+
                | Bit(s) | Technology / Description       |
                +--------+--------------------------------+
                | 0      | Hypertext Markup Language 4.01 |
                | 1      | Hypertext Matkup Language 5    |
                | 2      | Cascading Style Sheets         |
                | 3      | Cascading Style Sheets 2       |
                | 4      | Cascading Style Sheets 3       |
                | 5      | Cascading Style Sheets 4       |
                | 6      | ECMAScript / JavaScript        |
                | 7      | HTML5 Geolocation              |
                | 8      | HTML5 Video - Ogg Vorbis       |
                | 9      | HTML5 Video - H.264            |
                | 10     | HTML5 Video - WebM             |
                | 11     | HTML5 Canvas                   |
                | 12     | Secure Sockets Layer v2        |
                | 13     | Secure Sockets Layer v3        |
                | 14     | Transport Layer Security 1.0   |
                | 15     | Transport Layer Security 1.1   |
                | 16     | Transport Layer Security 1.2   |
                | 17     | HTTP Strict Transport Security |
                | 18     | Do Not Track (DNT)             |
                | 19:31  | Reserved for Future Usage      |
                +--------+--------------------------------+

   It should be noted that, for identifiers such as Do Not Track, the
   value of that bit being set to high (one) does not indicate that the
   feature is enabled, only that the user agent supports it.

3.1.  HTTP HAFI Header Example

   This section will provide an example of a HAFI header that can be
   used for reference.

   The example user agent supports the following technologies: HTML4.01,
   HTML5, CSS1+2+3, JavaScript, Geolocation, H.264 and WebM, SSLv3, and
   TLS 1.0 + 1.1.  The features identifier in binary would be the
   following:

   00000000 00000000 11100110 11011111

   The example user agent is abiding by HAFI 1.0, and the identifier in
   binary will be converted to decimal for transmission, so the HAFI
   header sent by the user agent would be the following:

   HAFI: version=1.0; features=59103





McSherry                  Expires June 7, 2013                  [Page 5]

Internet-Draft                    HAFI                     December 2012


4.  Security Considerations

   HAFI should not have any security implications, as it is simply a
   number and a version string being sent to a server.  Rather, HAFI may
   improve security, in certain contexts.

   For example, if a client shows that it supports SSLv3 and TLS 1.0
   whilst connecting over HTTPS, the server would be able to select a
   stream cipher over a block cipher, which would lower the likelihood
   of a BEAST attack on the client.


5.  Normative References

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


Author's Address

   Liam James McSherry

   Email: liamj.mcsherry@googlemail.com




























McSherry                  Expires June 7, 2013                  [Page 6]