ReverseHttp

ReverseHttp started off, for me, as an alternative setting for exploring notions of enrolment and routing as part of my work on RabbitMQ and AMQP.

About ReverseHttp

ReverseHttp (http://www.reversehttp.net/) is a protocol specification for enrolling in HTTP networks. The step of enrolment in a network is an often-overlooked piece of network design and architecture: people tend to concentrate on connection establishment and use, without considering the need for address- and name-assignment in any depth. The DHCP protocol is a kind of enrolment protocol, and PPP includes a kind of enrolment as well.

In the context of an HTTP network, to enrol is to claim a portion of URL-space that HTTP clients can address your service by. ReverseHttp provides a protocol for doing just that: claiming a portion of URL-space for your application.

The specification also includes a protocol for actually getting HTTP requests and responses back and forth once you've registered your claim on a portion of URL-space, but that transport half of the spec is quite fungible: lots of the work others have done in this area has explored alternative transports, but little of it concentrates on what I see as the most important aspect of the system, the enrolment step.

Alongside the specification, an implementation of ReverseHttp is available, written in Erlang using Mochiweb as its HTTP server library.

The Specifications

The ReverseHttp Protocol Specification:

"This document describes a dynamic, ReST-style means of enrolment and participation in an HTTP network. The message/http and application/http MIME types defined by RFC 2616 are used to build a dynamically-configurable "Remote CGI" service.

"Joining the World Wide Web as an HTTP server has been an ad-hoc, manual process. By using the protocol defined here, programs can provide services to the Web just as easily as they request services from the Web."

The RelayHttp Protocol Specification:

"This document describes a protocol for tunnelling HTTP traffic over HTTP, with the goal of providing portable, general, securable access to the World Wide Web for programs running in restricted environments, including Javascript programs running in browsers.

"The defined protocol is similar to the widely used HTTP proxying protocol, but differs in that the proxied traffic is carried over an ordinary HTTP connection; the special syntax used by an HTTP proxy is avoided here."

Downloading the Implementation

Instructions for downloading the implementation are here.