Next
Previous
Contents
- A client connection is accepted by the client-side.
The HTTP request is parsed.
- The access controls are checked. The client-side builds
an ACL state data structure and registers a callback function
for notification when access control checking is completed.
- After the access controls have been verified, the client-side
looks for the requested object in the cache. If is a cache
hit, then the client-side registers its interest in the
StoreEntry. Otherwise, Squid needs to forward the
request, perhaps with an If-Modified-Since header.
- The request-forwarding process begins with
protoDispatch
.
This function begins the peer selection procedure, which
may involve sending ICP queries and receiving ICP replies.
The peer selection procedure also involves checking
configuration options such as never_direct and
always_direct.
- When the ICP replies (if any) have been processed, we end
up at protoStart. This function calls an appropriate
protocol-specific function for forwarding the request.
Here we will assume it is an HTTP request.
- The HTTP module first opens a connection to the origin
server or cache peer. If there is no idle persistent socket
available, a new connection request is given to the Network
Communication module with a callback function. The
comm.c
routines may try establishing a connection
multiple times before giving up.
- When a TCP connection has been established, HTTP builds a
request buffer and submits it for writing on the socket.
It then registers a read handler to receive and process
the HTTP reply.
- As the reply is initially received, the HTTP reply headers
are parsed and placed into a reply data structure. As
reply data is read, it is appended to the StoreEntry.
Every time data is appended to the StoreEntry, the
client-side is notified of the new data via a callback
function.
- As the client-side is notified of new data, it copies the
data from the StoreEntry and submits it for writing on the
client socket.
- As data is appended to the StoreEntry, and the client(s)
read it, the data may be submitted for writing to disk.
- When the HTTP module finishes reading the reply from the
upstream server, it marks the StoreEntry as ``complete.''
The server socket is either closed or given to the persistent
connection pool for future use.
- When the client-side has written all of the object data,
it unregisters itself from the StoreEntry. At the
same time it either waits for another request from the
client, or closes the client connection.
Next
Previous
Contents