- First checks if it has the copy locally stored.
- If it has, then it forwards the result directly to the client.
- Otherwise, it queries on behalf of the end host, stores a copy of the result locally, and forwards the result back to the end host.
- It can substantially reduce the response time for repeated requests. (Especially if the bottleneck between the original server and receiver is less than bottleneck between the proxy server and receiver.)
- It reduces the access link bandwidth (of the university or the office), thereby reducing the cost.
- It reduces traffic on the Internet as a whole.
But there is one problem. What if the content was modified on the original server, rendering the copy on the proxy server to be an outdated one?
This is where Conditional GET statements kicks in. When a Proxy server receives an HTTP request, and it has the result stored locally, it still queries the original server, asking if that particular object was modified since the last time it was requested by the proxy server.
The âConditional GETâ statement has an additional field than a normal GET statement, called the âIf-modified-sinceâ field, which specifies the last time when the same request was made. The original server either -
- Tells the proxy server that the content was not modified - HTTP 304 status code, or
- Sends the updated content (in case there was some modification done) - HTTP 200 response-message code
If the Proxy server gets a 304 - âNo Modificationâ message, it forwards its local copy to the client. If modification had been there, the Cache forwards the new object, whilst storing it locally along with the date and time it received the new object (so that it can ask the original server later for modifications).
For obvious reasons, an HTTP 304 message does not contain a message body.