Client sends an Proxy-Connection: Keep-Alive header, the intermediate smart proxy sees this header and replaces it with Connection: Keep-Alive and sends to the web-server.
Não é assim que funciona.
Proxy-Connection
e Connection
são cabeçalhos de salto a salto e não cabeçalhos de ponta a ponta. Isso significa que o cliente decide usar uma conexão persistente com o proxy e o proxy decide que deseja ter uma conexão persistente com o host upstream (servidor ou proxy). Não é que o proxy queira ter uma conexão persistente apenas porque o cliente quer, mas essas são decisões independentes. Na verdade, um cliente pode usar a mesma conexão TCP com o proxy para acessar vários hosts, enquanto o proxy precisa fazer conexões TCP diferentes, porque precisa acessar hosts diferentes.
Além disso, Proxy-Connection
está errado de qualquer forma e deve ser Connection
apenas, não importa se o próximo salto é um proxy ou o servidor de destino. Veja também link .
Wouldn't that cause problems in current TCP connection?
Estes cabeçalhos são apenas um desejo e keep-alive está implícito no HTTP / 1.1, ou seja, o cabeçalho não é necessário neste caso quando o cliente quer manter o keep-alive. E como isso é um desejo, tanto o cliente quanto o servidor podem fechar a conexão TCP subjacente a qualquer momento entre as solicitações. Pode haver situações em que o servidor fecha a conexão exatamente ao mesmo tempo em que o cliente está enviando uma nova solicitação e o cliente tem que lidar com essa situação, na maioria dos casos, refazendo a solicitação em uma nova conexão TCP.