[whatwg] Web Sockets
Shannon
shannon at arc.net.au
Mon Jul 21 21:47:14 PDT 2008
In order to understand this issue better I did some preliminary research
into how HTTP and common implementations currently support the five
primary requirements of the WebSocket/TCPSocket proposal; namely
persistence, asynchronism, security, shared hosting and simplicity.
After reading http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html I'm
starting to suspect that both systems can be fully implemented without a
new connection protocol.
Firstly, according to rfc2616 "In HTTP/1.1, persistent connections are
the default behavior of any connection."
The other thing about persistent HTTP/1.1 connections is that they are
already asynchronous. Thanks to pipelining the client may request
additional data even while receiving it. This makes the whole websockets
protocol achievable on current HTML4 browsers using a simple application
or perl wrapper in front of the service ie:
service <--> wrapper <--> webserver (optional) <--> proxy (optional)
<--> client
a simple pseudo-code wrapper would look like this:
wait for connection;
receive persistent connection request;
pass request body to service;
response = read from service;
response_length = length of response;
send Content-Length: $response_length;
send $response
close request or continue
A threaded wrapper could queue multiple requests and responses.
In theory (as I have yet to perform tests) this solution solves all
websocket goals:
Simple: Can use CGI (taking advantage of webserver virtual-hosting,
security, etc...) or basic script wrapper
Persistent: HTTP/1.1 connections are persistent by default
Asynchronous: Requests and responses can be pipelined, meaning requests
and responses can be transmitted simultaneously and are queued.
Backwards-compatible: Should work with all common HTTP/1.1 compatible
clients, proxies and servers.
Secure: To exploit a service you would require CGI or dedicated
application. ISPs tightly control access to these. SSLis easy to
implement as a tunnel (ie. stunnel) or part of existing webserver.
Port sharing: This system can co-exist with existing
webserver/applications on same server using CGI, transparent proxy or
redirection.
Obviously some real-world testing would be helpful (when I find the
time) but this raises the question of whether websockets is actually
necessary at all. Probably the only part HTML5 has to play in this would
be to ensure that Javascript can open, read, write and close a
connection object and handle errors in a consistent manner. The
handshaking requirement and new headers appear to complicate matters
rather than help.
Shannon
More information about the whatwg
mailing list