There has been tremendous progress in understanding how bandwidth is shared by TCP-like connections. By associating each TCP-like connection with a utility function, the bandwidth sharing problem of TCP-like connections can be modeled as a distributed optimization problem for utility functions. However, little is known on how bandwidth is shared by HTTP-like connections through their utility functions at the TCP level. One of the main objectives of this paper is to provide a theory for bandwidth sharing of a large number of HTTP-like connections. Based on certain technical assumptions, we show that there is a utility function at the HTTP level for an HTTP-like connection and such a utility function can be derived from the utility function at the TCP level. The bandwidth is then shared by HTTP-like connections through utility functions at the HTTP level. We also address two possible extensions of the theory: the case with impatient TCP connections and the case with multiple types of requests. With appropriate modification of the utility functions at the HTTP level, we show that the bandwidth is still shared by optimizing their utillty functions at the HTTP level for the case with impatient TCP connections. For the case with multiple types of requests, the bandwidth shared at the HTTP level can still be found by solving a unique fixed point limit.