When the web server receives the request, it looks at the URI and decides how to handle it based on configuration information. It may handle the request internally by simply reading an HTML file from the filesystem, or it may forward the request to some component that is responsible for the resource corresponding to the URI. This can be a program that uses database information, for instance, to dynamically generate an appropriate response. To the browser it makes no difference how the request is handled; all it cares about is getting a response.
The response message looks similar to the request message. It consists of three things: a status line, some response headers, and an optional response body. Here’s an example:
HTTP/1.1 200 OK Last-Modified: Mon, 20 Dec 2002 23:26:42 GMT Date: Mon, 16 Jun 2003 20:52:40 GMT Status: 200 Content-Type: text/html Servlet-Engine: Tomcat Web Server/5.0 Content-Length: 59 <html> <body> <h1>Hello World!</h1> </body> </html>
The status line starts with the name of the protocol, followed by a
status code and a short description of the status code. Here the
status code is 200, meaning the request was executed successfully.
The response message has headers just like the request message. In
this example, the
Last-Modified header gives the date and time for when the resource was last modified. The browser can use this information as a timestamp in a local cache; the next time the user asks for this resource, the browser can ask the server ...