Como um servidor é notificado sobre a solicitação HTTP?

8

Eu tenho um entendimento básico de como o HTTP funciona. Entendo que o cliente (navegador da web) faz uma solicitação e o servidor responde novamente à solicitação. No entanto, o que não entendo é como um servidor da web sabe quando o cliente faz uma solicitação?

Se alguém me ligar, meu telefone toca e eu sou notificado. Da mesma forma, como um servidor da Web é notificado sobre a solicitação?

raj curioso
fonte
2
Como isso não é duplicado 5 anos após o lançamento do Superusuário?
Peter Mortensen

Respostas:

28

Há muitas camadas nisso. E, importante, muitos deles são intercambiáveis.

Por exemplo, você pode ter uma rede de cabo coaxial, ethernet ou Wi-Fi no nível físico. O HTTP funciona em cima de todos eles, mas cada um deles tem um tratamento ligeiramente diferente da carga útil que está sendo enviada.

O HTTP funciona em cima de outro protocolo, chamado TCP, que, por sua vez, roda mais ou menos em cima de outro protocolo, chamado IP (hoje em dia principalmente em duas variantes - IPv4 e IPv6).

Portanto, o servidor HTTP registra um endereço IP (como 184.38.45.1, ou na maioria das vezes "qualquer"), juntamente com uma porta TCP ( 80sendo o padrão para HTTP, mas em geral qualquer coisa de 1até 65535), no sistema operacional. Agora, o servidor HTTP diz ao sistema operacional para fazer o ping quando os dados (ou outra mensagem) chegarem. O sistema operacional sabe quando isso acontece, porque o driver da placa de interface de rede diz isso. E o driver da NIC é informado pela própria NIC, que na verdade possui seu próprio software para interpretar os sinais elétricos no cabo de rede (ou os sinais sem fio no ar, etc., você entendeu).

Nota lateral :

Se você quiser saber mais sobre como a NIC pode iniciar a comunicação com o driver / sistema operacional, consulte algumas informações básicas sobre interrupções de hardware - basicamente, o que a CPU está fazendo no momento está parado e o fluxo do programa muda para uma interrupção. rotina do manipulador - um pedaço de código extremamente simples que cuida da notificação do sistema e, em seguida, retorna imediatamente o controle à coisa original que a CPU estava fazendo. Na verdade, ele pode responder muitas perguntas sobre o funcionamento interno do sistema operacional e do próprio computador - como um sistema operacional pode "roubar" a CPU da execução de aplicativos e embaralhar os recursos da CPU entre diferentes aplicativos em execução ao mesmo tempo, mesmo se eles não cooperarem.

De volta aos negócios:

Na analogia manual do telefone, imagine que o telefone realmente não toque. Para saber se você está tentando fazer uma ligação, é necessário olhar a tela periodicamente e verificar. Para facilitar o gerenciamento para o servidor HTTP (como já existem várias camadas que fazem essa verificação periódica), você pode realmente bloquear a tentativa de verificação.

Então, em vez de checar, vendo que não há nada lá e checar novamente, você basicamente fica olhando a tela o tempo todo. No entanto, você basicamente tem um sistema totalmente separado para lidar com isso (no seu caso, o centro auditivo, que verifica as vibrações do ar em busca de informações úteis, o anel), para que na verdade não exija sua atenção (tempo da CPU).

Isso é aprimorado ainda mais pelas técnicas que permitem monitorar muitas conexões ao mesmo tempo (IOCP). Isso se aproxima cada vez mais do sistema de toque do telefone - você tem uma sala com dez mil telefones, mas só se importa com os que estão tocando no momento, os outros não estão prestando atenção.

Luaan
fonte
Cuidado, "ping" tem um significado totalmente diferente e não relacionado nas redes. Além disso, por que ninguém mencionou "interrupções de hardware"?
Lie Ryan
11
@LieRyan Bem, sim, é na parte em que a NIC diz ao driver da NIC. Parece uma minúscula mancha na enorme lista de abstrações envolvidas e, realmente, fora das pessoas que brincam com arquiteturas da velha escola, dispositivos embarcados ou desenvolvedores de drivers, é um conhecimento bastante obscuro, infelizmente. Mas bem, acho que vou adicionar uma menção rápida.
Luaan
11
As portas são apenas números? ou são pinos físicos na placa NIC? Acho que é difícil imaginar que poderia ser 65536 portas
Dhiwakar Ravikumar
2
@DhiwakarRavikumar: Sim, as portas são apenas números. Eles são compostos por um programa ou sistema operacional, não correspondem a nada no hardware.
Sleske #
11
As portas @DhiwakarRavikumar são apenas números, mas as interrupções de hardware costumavam ser pinos de hardware na CPU (então você tinha um pino diferente para "conseguiu dividir por zero!" E outro para "o despertador está tocando"). Então, você só tinha três ou sete interrupções diferentes ou a maior parte do tempo. É comparável às estações telefônicas antigas - elas costumavam ter pinos físicos que você precisava conectar para fazer a ligação, mas hoje em dia são trocados por software, exatamente como as portas TCP.
Luaan
9

Os computadores usam um conceito chamado "portas", análogo a "extensões" para uma central telefônica: O cliente não está apenas "chamando" o endereço IP do servidor, mas também envia a solicitação para uma porta específica nesse servidor.

Existem milhares de portas ( lista da Wikipedia ), por exemplo, a porta 80 é o padrão para HTTP.

O truque é que um programa, por exemplo, um servidor da web, pode se registrar para ouvir em uma porta específica. Em seguida, o sistema operacional passará todos os pedidos recebidos nessa porta para esse programa.

O ponto de ter várias portas é que você pode ter vários serviços em execução no mesmo servidor ao mesmo tempo, usando portas diferentes, elas não interferem entre si.

jg-faustus
fonte
65.535 portas para ser exato
ub3rst4r
3

Servidor da Web notificado com o seguinte processo

Accept ()
Liseten()
bind()
socket()

Digamos que o servidor da web ouça na porta 80, quando a solicitação do cliente vier na porta 80, ele aceitará uma conexão com a chamada do sistema accept (). Essa chamada normalmente bloqueia até que um cliente se conecte ao servidor.

Em seguida, ouça as conexões com a chamada do sistema listen () e vincule o soquete a um endereço usando a chamada do sistema bind ().

O Atlast cria um soquete com a chamada do sistema socket ().

Espero que isto ajude!

vembutech
fonte
0

Você possui o diretório / var / log / apache2 com o seguinte diretório:

access.log
error.log
other_vhosts_access.log

Está relacionado ao que você deseja do cliente e a como notificar, sms, email e assim por diante.

Minha sugestão:

Você pode criar um servidor de log e enviar todos os seus logs, como servidor de correio, servidor DNS, servidor Web e assim por diante. Em seguida, você pode analisá-lo. Mesmo o mesmo servidor usa db e você pode executar consultas.

PersianGulf
fonte
Obrigado pela resposta, mas acho que você não entendeu minha pergunta. Eu quis dizer que quando recebo uma ligação, meu telefone toca. Então, eu sei que recebi uma ligação porque meu telefone tocou. Da mesma forma, quando o cliente faz uma solicitação, como o servidor da Web é notificado?
raj curiosos
0

Eu acho que o servidor web registra funções de retorno de chamada na porta.

Para que, sempre que algo seja recebido nessa porta específica, o sistema chame essa função de retorno de chamada registrada anteriormente. Dentro dessa chamada de retorno, ele pode definir um evento ou algo parecido e, em seguida, o servidor da Web terá um thread dedicado aguardando esse evento. Esse encadeamento será executado e enfileirará essa solicitação na lista principal de solicitações que o servidor da web já está processando.

O que eu dei aqui é uma visão muito superficial e macro das coisas acontecendo. Para obter respostas mais precisas, vamos esperar até que os especialistas entrem.

Czar Eu sou Czar
fonte