GNU Info

Info Node: (gawkinet.info)Primitive Service

(gawkinet.info)Primitive Service


Next: Interacting Service Prev: Web page Up: Using Networking
Enter node , (file) or (file)node

A Primitive Web Service
=======================

   Now we know enough about HTTP to set up a primitive web service that
just says `"Hello, world"' when someone connects to it with a browser.
Compared to the situation in the preceding node, our program changes
the role. It tries to behave just like the server we have observed.
Since we are setting up a server here, we have to insert the port
number in the `localport' field of the special file name. The other two
fields (HOSTNAME and REMOTEPORT) have to contain a `0' because we do
not know in advance which host will connect to our service.

   In the early 1990s, all a server had to do was send an HTML document
and close the connection. Here, we adhere to the modern syntax of HTTP.
The steps are as follows:

  1. Send a status line telling the web browser that everything is OK.

  2. Send a line to tell the browser how many bytes follow in the body
     of the message. This was not necessary earlier because both
     parties knew that the document ended when the connection closed.
     Nowadays it is possible to stay connected after the transmission
     of one web page.  This is to avoid the network traffic necessary
     for repeatedly establishing TCP connections for requesting several
     images. Thus, there is the need to tell the receiving party how
     many bytes will be sent. The header is terminated as usual with an
     empty line.

  3. Send the `"Hello, world"' body in HTML.  The useless `while' loop
     swallows the request of the browser.  We could actually omit the
     loop, and on most machines the program would still work.  First,
     start the following program:

     BEGIN {
       RS = ORS = "\r\n"
       HttpService = "/inet/tcp/8080/0/0"
       Hello = "<HTML><HEAD>" \
               "<TITLE>A Famous Greeting</TITLE></HEAD>" \
               "<BODY><H1>Hello, world</H1></BODY></HTML>"
       Len = length(Hello) + length(ORS)
       print "HTTP/1.0 200 OK"          |& HttpService
       print "Content-Length: " Len ORS |& HttpService
       print Hello                      |& HttpService
       while ((HttpService |& getline) > 0)
          continue;
       close(HttpService)
     }

   Now, on the same machine, start your favorite browser and let it
point to `http://localhost:8080' (the browser needs to know on which
port our server is listening for requests). If this does not work, the
browser probably tries to connect to a proxy server that does not know
your machine.  If so, change the browser's configuration so that the
browser does not try to use a proxy to connect to your machine.


automatically generated by info2www version 1.2.2.9