'''[http://tools.ietf.org/html/rfc2616%|%Hypertext Transfer Protocol]''', or '''HTTP''', is the protocol used within the [WWW%|%World Wide Web] for transferring documents. Its latest version is [HTTP 1.1%|%1.1]. [HTTP/2], an incompatible binary protocol, is designed to be its successor. ** See Also ** [http://www.w3c.org/Protocols/%|%HTTP - Hypertext Transfer Protocol]: The official page for the HTTP protocol specification. ** Description ** HTTP was preceded by [Tuplespace], which is data-centric rather than resource-centric, and provides an even smaller set of verbs. [EMJ] 2015-11-13 : Is someone claiming an actual connection here? If not, why mention one particular idea among many about how to share data across a network? [PYK] 2015-11-13: Thanks for the heads-up. I had inadvertantly placed this note on the [HTML] page, and have now moved it over to this page. HTTP must have been inspired by tuplespace, which is an earlier invention of a restricted set of verbs that is sufficient for the purpose distributing data among peers. HTTP is very similar, with only a few more verbs and a switch in focus from data to resources. People considering an HTTP-based architecture like [REST] might be interested in considering tuplespace as an alternative. Tuplespace is more transactional. It provides an atomic `pop` operation, while HTTP doesn't. I find it interesting that [REST] in some ways is an attempt at retrofitting HTTP to be more like Tuplespace, somewhat like [Javascript] has managed to retrofit [HTML] to be more of a traditional desktop user interface system. HTTP and HTML were designed for a rather narrow purpose, and because of their wild success have ended up evolving back toward systems the predate them. ** Servers ** [Web Publishing]: contains a list of HTTP servers ** Tcl Clients ** [http]: A client-side implementation of HTTP bundled with [Tcl]. [nstcl-http]: Another client-side implementation of HTTP. [rl_http]: A [REpresentational State Transfer, REST%|%REST]-capable, never-blocking HTTP client package that supports HTTPS, deflate, chunked encoding for Tcl, [NaviServer], or [AOLserver]. `[ycl comm http]`: An [Hypertext Transfer Protocol%|%HTTP] client that uses [coroutine%|%coroutines] and [reflected channel%|%reflected channels]. Supports chunked encoding. (The [https://github.com/efrecon/docker-client%|%Docker client] implementation includes an implementation of the minimal subset of HTTP necessary for the very purpose of talking to the Docker daemon. It has the particularity (over [http]) to support chunked encoding, and I wish I had known about [rl_http] before! Note that the implementation is also able to perform HTTP protocol operation on top of any file descriptor, since it uses pipes to `netcat` or `nc` to talk to local Docker daemons (UNIX domain sockets). [EF]) ** Tools ** [autoproxy]: a [tcllib] module that attempts to automate the use of HTTP proxy servers in Tcl HTTP client code. [vfs::http]: a [VFS%|%virtual filesystem] for HTTP transactions ** See Also ** [http in Jacl]: [Tunnel HTTP through SMTP]: [Tunnel IRC through HTTP proxies]: allow HTTP/1.1 CONNECTs to the outside. ** Line Translation ** [PYK] 2016-04-13: When forming an HTTP request in Tcl, make sure lines end in CRLF. Otherwise, the reponse may be `400 Bad Request`. The [Tcllib MIME%|%MIME] module in [Tcllib] produces messages with CRLF as the line delimiter, in which case the channel should be configured as `-translation binary`. <> Internet | protocol