ProtocolVersions.html 5.74 KB
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content=
    "HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org" />
    <title>
      ProtocolVersions -- Design Issues
    </title>
    <nextid />
  </head>
  <body>
    <a href="OldDocs.html"><img src="../Icons/WWW/arch1990" /></a>
    <hr />
    <address>
      (part of <a name="10" href=
      "../Implementation/DesignNotes.html">Design Notes</a> )
      92.06.11 RC
    </address>
    <h1>
      From Version to Version of HTTP
    </h1>
    <h2>
      Current version of HTTP
    </h2>I propose 0.9 as the number of the <a name="3" href=
    "HTTP0.9Summary.html">current version</a> .
    <h2>
      Compatibility
    </h2>Today (June 1992) WWW is used in a community of highly
    computer literate people. The cost of making all users adopt a
    new, incompatible version of the browser and/or the server is
    not very high, neither in effort nor in inconvenience.
    <p>
      Nevertheless, I will propose to go to a new version in a
      compatible way. [Absolutely -- we can require complete
      back-compatibility for both clients and servers - Tim]
    </p>
    <h2>
      Imperatives
    </h2>Browsers and servers must have a few <a name="8" href=
    "HTTP0.9Summary.html#1">characteristics</a> that must be kept
    over all versions.
    <h2>
      What has a version?
    </h2>A version is associated with the HTTP protocol used in the
    exchange between servers and browsers. Because two agents on
    two different machines are involved, there can be two different
    implementations of the protocol at work. The version of the
    browser or the server refers to its capabilities in displaying
    or providing, not to the protocol. Perhaps a Browser or server
    should be characterised by both numbers: Linemode 3.4/2.0 would
    mean browser version 3.4 using HTTP 2.0. [Hang on -- let's not
    complicate things unduly. The software has a version number,
    and so does the protocol but they're nothing to do with each
    other]
    <p>
      An HTTP version number consists of
    </p>
    <ul>
      <li>an integer indicating the set of features,
      </li>
      <li>a dot,
      </li>
      <li>an integer indicating the level, whereby the differences
      between, say, 2.01 and 2.02 must be such that ANY two version
      2 implementations must be able to communicate without
      problems.
      </li>
    </ul>[So you require back-compatibility between "major"
    versions number before the dot changing] and both-ways
    compatibility between "minor" versions? -- DEC jargon]
    <h2>
      Aims
    </h2>In a new version of HTTP, there can be added features, but
    there can also be a lack of deprecated ones. Communication
    between a browser using version n and a server using version m
    should in some sense be possible.
    <p>
      It is reasonable to require that an agent using version n+1
      also still knows how to handle version n but does not have to
      know version n-1.
    </p>
    <h2>
      Forwards
    </h2>There are three disjoint elements:
    <ul>
      <li>the WWW data model, which today consists of documents
      which may have explicit links and/or be queryable with
      text-based queries. [Was: maybe I'd prefer to call data
      bases, since an index is a reference table built from a data
      base to ease access to it)." An index can be many <a name="9"
        href="WhatIsAnIndex.html">things</a> ] There is no reason
        why other types should not be added, such as
        time-indefinite communications (eg. a telnet session, TV or
        process control).[Is this really different from a
        document?]
      </li>
      <li>the HTTP protocol, which should be defined outside the
      document contents. It needs to evolve and expand.
      </li>
      <li>the HTML markup which is today the only implemented
      format we accept for the document contents. Here certainly we
      want more.
      </li>
    </ul>The next releases should distinguish these cleanly. One
    way is to talk HTTP over a control connection and documents
    over a data connection.
    <h2>
      Pragmatism
    </h2>Having suggested a split of control and data, I realise
    that at present this is too much, and so we must keep going on
    one connection. [Ample justification for this is the difference
    in reponse time from HTTP servers and FTP servers -- the latter
    using 2 connections] That implies though that we must do our
    own transmission protocol inside HTTP, ie. when we send, say,
    binary data, then because we mix HTTP and data on the same
    connection, we have to do things inside HTTP like "here follows
    3406 bytes of binary data" because otherwise we are not
    guaranteed to be able to distinguish between HTTP controls and
    document data.
    <h2>
      Proposed modifications
    </h2>
    <h3>
      Version 1.0:
    </h3>The HTTP version number is sent in every communication, by
    the browser after the argument to GET, by the server in a tag
    at the start. [I don't see the reason for this version.]
    <h3>
      Version 2.0:
    </h3>The HTTP version number is sent at the start of every
    communication.
    <p>
      The HTTP commands are not in HTML; however, they are mixed in
      with the data stream. [I would say they envelop the data
      stream. I think it is important to keep the TOEOF style as an
      option because it is so practical]
    </p>
    <p>
      See also <a name="4" href="ProtocolProblems.html">problems to
      solve</a> , a way of communicating <a name="6" href=
      "Protocolcomms.html">with different versions</a> and a
      <a name="7" href="CompatibleProof.html">proof</a> that the
      new version is backwards compatible.
    </p>
  </body>
</html>