[hybi] HyBi Design Space
Salvatore Loreto <salvatore.loreto@ericsson.com> Thu, 08 October 2009 20:49 UTC
Return-Path: <salvatore.loreto@ericsson.com>
X-Original-To: hybi@core3.amsl.com
Delivered-To: hybi@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 4AB3A3A6804 for <hybi@core3.amsl.com>; Thu, 8 Oct 2009 13:49:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -5.87
X-Spam-Level:
X-Spam-Status: No, score=-5.87 tagged_above=-999 required=5 tests=[AWL=0.379, BAYES_00=-2.599, HELO_EQ_SE=0.35, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SkP+kMCgLHXX for <hybi@core3.amsl.com>; Thu, 8 Oct 2009 13:49:25 -0700 (PDT)
Received: from mailgw3.ericsson.se (mailgw3.ericsson.se [193.180.251.60]) by core3.amsl.com (Postfix) with ESMTP id B23EE3A69FB for <hybi@ietf.org>; Thu, 8 Oct 2009 13:49:02 -0700 (PDT)
X-AuditID: c1b4fb3c-b7baeae000005f8e-41-4ace50a3bd96
Received: from esealmw127.eemea.ericsson.se (Unknown_Domain [153.88.253.124]) by mailgw3.ericsson.se (Symantec Mail Security) with SMTP id B9.95.24462.3A05ECA4; Thu, 8 Oct 2009 22:50:44 +0200 (CEST)
Received: from esealmw129.eemea.ericsson.se ([153.88.254.177]) by esealmw127.eemea.ericsson.se with Microsoft SMTPSVC(6.0.3790.3959); Thu, 8 Oct 2009 22:50:43 +0200
Received: from mail.lmf.ericsson.se ([131.160.11.50]) by esealmw129.eemea.ericsson.se with Microsoft SMTPSVC(6.0.3790.3959); Thu, 8 Oct 2009 22:50:43 +0200
Received: from nomadiclab.lmf.ericsson.se (nomadiclab.lmf.ericsson.se [131.160.33.3]) by mail.lmf.ericsson.se (Postfix) with ESMTP id 7728E2495 for <hybi@ietf.org>; Thu, 8 Oct 2009 23:50:43 +0300 (EEST)
Received: from nomadiclab.lmf.ericsson.se (localhost [127.0.0.1]) by nomadiclab.lmf.ericsson.se (Postfix) with ESMTP id 3903C21A1F for <hybi@ietf.org>; Thu, 8 Oct 2009 23:50:43 +0300 (EEST)
Received: from localhost.localdomain (localhost [127.0.0.1]) by nomadiclab.lmf.ericsson.se (Postfix) with ESMTP id BFB5D219D4 for <hybi@ietf.org>; Thu, 8 Oct 2009 23:50:42 +0300 (EEST)
Message-ID: <4ACE50A2.5070404@ericsson.com>
Date: Thu, 08 Oct 2009 23:50:42 +0300
From: Salvatore Loreto <salvatore.loreto@ericsson.com>
User-Agent: Thunderbird 2.0.0.23 (X11/20090825)
MIME-Version: 1.0
To: "hybi@ietf.org" <hybi@ietf.org>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Virus-Scanned: ClamAV using ClamSMTP
X-OriginalArrivalTime: 08 Oct 2009 20:50:43.0658 (UTC) FILETIME=[00D2BAA0:01CA4859]
X-Brightmail-Tracker: AAAAAA==
Subject: [hybi] HyBi Design Space
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/hybi>
List-Post: <mailto:hybi@ietf.org>
List-Help: <mailto:hybi-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 08 Oct 2009 20:49:26 -0000
Hi there, at the breakfast BoF in Stockholm it was brought up that it would have been helpful to more clearly describe the design space, including the programming environments (client, server, library, etc.), deployed infrastructure (routers, proxies, etc.). here the analysis that we have written down and we are going to insert in the draft-loreto-http-bidirectional. comments, feedbacks and suggestions are very welcome cheers Sal www.sloreto.com 6. Design Space In order to define additions to HTTP that could enable improved mechanisms for bidirectional HTTP or new bidirectional protocols, it is important to map out the design space and potential design alternatives, with special attention to deployed infrastructure and programming environments. In existing HTTP-based systems, the typical semantic is client-server Representational State Transfer (REST), where the resources served are closely associated with an entity known by a URI or URL. However, the introduction of bidirectionality can significantly change the normal HTTP patterns. As one example, the standard roles of client and server can be reversed and a server can request resources from a client. Unfortunately, due to a lack of client addressability URL's may not be applicable to client entities and new addressing paradigms may be required. Furthermore, bidirectionality introduces a message passing pattern into the traditional REST style. These additional semantics will influence the design of the bidirecitonal protocols, addressing, and APIs. Without a strong association between an identified entity and a resource, new mechanisms for content distribution and caching messages might need to be considered. In the next sections we analyse the design space from several different sides of the HTTP deployed infrastructure, including clients, servers, and intermediaries such as proxies, caching servers, and load balancers. The process of evaluating eventual improvements to the bidirectional solutions or development of new bidirection protocols should take into consideration the following concerns and criteria: Complexity: enables ease of implementation, understanding, and debugging Capability: addresses all/most known bidirectional use-cases Extensibility: has the capacity to handle new use-cases Latency: defines minimal, average, and maximal latency for message delivery Bandwidth overhead: minimizes overhead for idle and busy usage Scalability: has the ability to handle large scale usage Footprint: has the ability to handle small devices and/or massive replication ("cloud") AAA: enables proper Authentication, Authorization and Accounting Security: enables strong security for integral, confidential, endorsed, and cross domain deployments. Interoperability: can work with and/or be integrated with existing bidirectional implementations Compatibility: can work with existing web infrastructure for distributing, caching, manipulating, and displaying content. 6.1. Server side The server side can be decomposed into three categories: In-band HTTP: Bidirectionality is part of the normal HTTP/Web server responsibilities. HTTP is used for transporting server events. Examples include Comet and (in some deployments) BOSH. Out-of-band HTTP: Here two servers are involved: bidirectionality is not part of the normal HTTP/Web server responsibilities, but the backend service is offered by a separate server that might not even be on the same machine of the HTTP/Web server. HTTP is used for transporting server events. When a browser is used on the client side, a cross-domain solution is needed to overcome the "same-source" web service restriction. Examples include BOSH (in some deployments) and Lightstreamer. In-band non-HTTP: Bidirectionality is part of the normal HTTP/Web server responsibilities. However, server events are transported on an upgraded HTTP connection. Examples include Bidirectional Web Transfer Protocol (BWTP) and WebSockets. Out-of-band non-HTTP: Bidirectionality is offered by a dedicated server using non HTTP protocol for transport server events. Examples include WebSockets. The HTTP transport based servers (in-band and out-of-band) can work with existing HTTP standards or enhanced HTTP. Enhanced HTTP would be a standardized set of headers and behaviours to assist with bidirectionality and cross domain concerns. At present, a protocol that interacts heavily with JavaScript on the client side implies some constraints also on the server side, such that they have to use XML or JSON encapsulation. 6.2. Clients Clients can be involved in bidirectional transport in the following capacities: In browser open standards with HTTP transport: For applications written in a web browser scripting language (e.g. JavaScript) within a browser client. Examples include Comet and BOSH. In browser open standards with enhanced HTTP transport: For applications written in a web browser scripting language (e.g. JavaScript) within a browser client. Examples include Comet with cross domain extensions. Browsers using either standard HTTP transport or enhanced HTTP transport typically use XMLHttpRequest (XHR) API [W3C.WD-XMLHttpRequest2-20090820] allowing scripts to perform HTTP client functionality. The XHR object can be used to perform bidirectional HTTP using both "long polling" and "HTTP streaming" mechanisms. XHR also supports the cross domain extension [W3C.WD-cors-20090317], which overcomes the same-origin restrictions that prevent a Web application running from one origin from obtaining data retrieved from another origin. However, XHR presents some limitations on the headers that can be set by the user. An alternative to XMLHttpRequest is using the Server-Sent Events API [W3C.WD-eventsource-20090423]. This "EventSource: interface enables servers to push data to Web pages over HTTP or using dedicated server-push protocols. In browser open standards with non HTTP transport: For applications written in JavaScript within a browser client. Examples include BWTP and WebSockets. In browser with plugin: This is not of particular interest to IETF, but should be noted as part of the design space. Examples include BlazeDS. Non-browser HTTP: A bidirectional client may be written outside of a browser and use bidirectional web transports. Typically this is done so that a rich or minimal client can bypass firewalls to access public servers over HTTP transports. Examples include the Comet Java client and the Second Life Viewer. Non browser enhanced HTTP: [Definition and examples to follow.] Non browser non-HTTP: [Definition and examples to follow.] 6.3. Intermediaries Intermediaries (e.g. proxies, gateways, caching servers, load balancers, etc) can be involved in bidirectional transport in several capacities: Legal HTTP relay: Transports such as long polling use intermediaries to carry legal HTTP requests and response. Any capabilities that may interfere with bidirectional flow (e.g. caching) are controlled with standard headers or cookies. The intermediary may be a participant in the transport (e.g., changing framing or encapsulation). Defacto HTTP relay: Some streaming transports use the common behavior of HTTP intermediaries to forward content packet-by- packet. This relies on intermediaries to not cache or buffer content. Enhanced HTTP relay: Uses yet-to-be-defined HTTP headers to assist HTTP based bidirectional transports. The intermediary may be a participant in the transport (e.g., changing framing or encapsulation). Upgraded HTTP relay: Uses HTTP upgrade to relay a non-HTTP protocol. Tunneled relay: Uses (or abuses?) the CONNECT mechanism to simulate an SSL connection to be used as a tunnel for a non-HTTP transport. [W3C.WD-XMLHttpRequest2-20090820] Kesteren, A., "XMLHttpRequest Level 2", World Wide Web Consortium WD WD-XMLHttpRequest2-20090820, August 2009, <http://www.w3.org/TR/2009/WD-XMLHttpRequest2-20090820>. [W3C.WD-cors-20090317] Kesteren, A., "Cross-Origin Resource Sharing", World Wide Web Consortium WD WD-cors-20090317, March 2009, <http://www.w3.org/TR/2009/WD-cors-20090317>. [W3C.WD-eventsource-20090423] Hickson, I., "Server-Sent Events", World Wide Web Consortium WD WD-eventsource-20090423, April 2009, <http://www.w3.org/TR/2009/WD-eventsource-20090423>.
- [hybi] HyBi Design Space Salvatore Loreto
- Re: [hybi] HyBi Design Space Infinity Linden (Meadhbh Hamrick)
- Re: [hybi] HyBi Design Space Thomson, Martin
- Re: [hybi] HyBi Design Space Salvatore Loreto
- Re: [hybi] HyBi Design Space Salvatore Loreto
- [hybi] Multiplexing in WebSocket (Was: HyBi Desig… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Infinity Linden (Meadhbh Hamrick)
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Graham Klyne
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Greg Wilkins
- Re: [hybi] HyBi Design Space Stefano Salsano
- Re: [hybi] HyBi Design Space Thomson, Martin
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Graham Klyne
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Jamie Lokier
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Michael(tm) Smith
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Bjoern Hoehrmann
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… SM
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Martin Tyler
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Ian Hickson
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Julian Reschke
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket (Was: HyBi D… Wellington Fernando de Macedo
- [hybi] new drat design-space-bidirectional Salvatore Loreto
- Re: [hybi] Multiplexing in WebSocket Ian Hickson
- Re: [hybi] Multiplexing in WebSocket Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket Ian Hickson
- Re: [hybi] Multiplexing in WebSocket Julian Reschke
- Re: [hybi] Multiplexing in WebSocket Ian Hickson
- Re: [hybi] Multiplexing in WebSocket Peter Saint-Andre
- Re: [hybi] Multiplexing in WebSocket Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket Ian Hickson
- Re: [hybi] Multiplexing in WebSocket Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket Jamie Lokier
- Re: [hybi] Multiplexing in WebSocket Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket Ian Hickson
- Re: [hybi] Multiplexing in WebSocket Greg Wilkins
- Re: [hybi] Multiplexing in WebSocket Ian Hickson