HTTP is a simple protocol. You make a tcp connection and send a request then wait for the response. You repeat this over and over. In case of HTTP 1.0 you always make new connections for each request while in HTTP 1.1 you can send and receive multiple requests over the same connection (you can even use pipelining but some HTTP clients and severs don't handle that well).
Both a request and a response contains the following things:
- HTTP protocol in use (1.0 or 1.1)
- Request parameters (like url) in case of a request or response status (HTTP status code) in case of a response
- Headers: these are string key/value pairs that contain only ASCII characters (!!!).
- Optional payload (it can be zero bytes or even arbitrary binary data)
Some important notes:
- I don't recommend using unicode strings in the header (because its ASCII according to the standard) however its possible, when both the client and server side is under my control I convert the strings to utf8 and then I url-encode the strings or base64 encode before sending. If the server isn't yours then you don't know how the server handles non-ascii characters or url encoding.
- The requested url and the header part of the request has a size limit in most servers (configurable and different in each server) so don't try to send big data in header key-value pairs or encoded as query string parameters in your url! Only the payload has unlimited size! With POST method you can send key-value parameters in the payload.
If you want to go the C/C++ route then use libcurl as your HTTP client to perform your requests to the server:
http://curl.haxx.se/libcurl/c/libcurl-tutorial.html[
^]
You can find libraries for a lot of languages for JSON on its website:
http://www.json.org/[
^]
Independently form your project I highly recommend learning python. Not only because dealing with http is easy in it but because today its one of the best and simplest scripting languages with really good library support and its quite platform independent. I always prototype HTTP server and client behavior in this language. You can use it to implement HTTP server side behavior as cgi or wsgi (by extending well known servers like Apache). If you use only a subset of python (RPython) then you can convert it to binary executables using PyPy.
There should be at least one scripting language in your toolbox and python is a really good choice.