This section explains some of the tricky and much misunderstood aspects of proxy server requests, including:
How the URIs in proxy requests differ from server requests
How intercepting and reverse proxies can obscure server host information
The rules for URI modification
How proxies impact a browser's clever URI auto-completion or hostname-expansion features
Web server and web proxy messages have the same syntax, with one exception. The URI in an HTTP request message differs when a client sends the request to a server instead of a proxy.
When a client sends a request to a web server, the request line contains only a partial URI (without a scheme, host, or port), as shown in the following example:
GET /index.html HTTP/1.0 User-Agent: SuperBrowserv1.3
When a client sends a request to a proxy, however, the request line contains the full URI. For example:
GET http://www.marys-antiques.com/index.html HTTP/1.0 User-Agent: SuperBrowser v1.3
Why have two different request formats, one for proxies and one for servers? In the original HTTP design, clients talked directly to a single server. Virtual hosting did not exist, and no provision was made for proxies. Because a single server knows its own hostname and port, to avoid sending redundant information, clients sent just the partial URI, without the scheme and host (and port).
When proxies emerged, the partial URIs became a problem. Proxies needed to know the name of the destination ...