Nunca pensei sobre isso, mas agora estou interessado em algumas coisas básicas nos bastidores. 1) O servidor web fecha a conexão após cada solicitação? 2) Quando tenho mais janelas do navegador abertas e todas solicitam dados de algum servidor web, o servidor web usa algum tipo de comunicação de soquete padrão para reconhecer qual conexão estava solicitando o quê? 3) E se houver mais usuários do que portas livres (digamos 66k solicitando algo ao mesmo tempo)
Obrigado :)
Responder1
- Depende de qual versão de HTTP a solicitação está usando. As conexões HTTP 1.0 são fechadas imediatamente quando o servidor termina de enviar a resposta de volta ao agente do usuário. HTTP1.1 adicionou suporte para keepalives, que permite que a conexão do soquete permaneça aberta após a resposta ser retornada ao agente do usuário. Neste caso, um cabeçalho HTTP Connection: Keep-Alive é enviado pelo agente do usuário indicando que deseja manter a conexão aberta, implicando que enviará mais solicitações.
- Sim. Esta é a funcionalidade básica do soquete. O cliente abre um soquete em uma porta local não utilizada (normalmente alta) e tenta abrir uma conexão com uma porta de destino específica (por exemplo: 80 para HTTP) no host remoto. Todas as outras conexões criadas pelo cliente abrem um soquete local em uma porta diferente, mas ainda podem tentar uma conexão na mesma porta no host remoto.
- O processo do ouvinte no servidor gerará processos de trabalho para lidar com as diversas solicitações recebidas, deixando o ouvinte livre para lidar com as solicitações recebidas. A maioria dos servidores http terá uma opção de configuração para controlar o número de solicitações simultâneas a serem tratadas.
Responder2
1) Geralmente cada solicitação de página está confinada a uma conexão aberta e fechada.
2) Seu computador altera sua porta de origem para cada solicitação que faz. O servidor usa a combinação IP/porta de origem para rastrear quais solicitações vieram de quais hosts
3) Bem, o servidor está respondendo a todas as solicitações HTTP na porta 80. Mas quanto aos clientes, se você pudesse gerar solicitações de 66K de 1 cliente exatamente ao mesmo tempo, você poderia ter problemas, não tenho certeza disso.
Responder3
1) Keepalive é suportado na maioria dos servidores web modernos, portanto, se o navegador suportar, o servidor web honrará mais de uma solicitação por conexão.
http://en.wikipedia.org/wiki/HTTP_persistent_connection
2) Sim, cada conexão possui seu próprio soquete, que é um par IP:PORT.
http://en.wikipedia.org/wiki/TCP_sockets
3) Se você tem 65.535 pessoas solicitando simultaneamente de um único servidor, você precisa dar um passo atrás e considerar o que está fazendo! :) Sério, a menos que você tenha muita sorte, você sentirá a necessidade de balancear a carga antes de chegar a esse problema. Um problema que você pode enfrentar antes é ficar sem descritores de arquivo. O padrão no bash é 1024 (veja "ulimit" na página de manual do bash).