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

8

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

Se alguém me chamar, meu telefone tocará e eu serei notificado. Da mesma forma, como um servidor web é notificado sobre a solicitação?

    
por raj curious 31.10.2014 / 05:52

5 respostas

28

Existem muitas camadas para isso. E, mais importante, muitos deles são intercambiáveis.

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

O HTTP funciona sobre outro protocolo, chamado TCP, que, por sua vez, é mais ou menos executado em cima de outro protocolo, chamado IP (atualmente em grande parte em duas variantes - IPv4 e IPv6).

Assim, o servidor HTTP registra um endereço IP (como 184.38.45.1 ou, na maioria das vezes, "qualquer"), juntamente com uma porta TCP ( 80 sendo o padrão para HTTP, mas em geral qualquer coisa de 1 para 65535 ), com o sistema operacional. Agora, o servidor HTTP informa ao SO para fazer ping quando os dados (ou outra mensagem) chegarem. O SO 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 tem 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, convém consultar algumas informações básicas sobre interrupções de hardware - basicamente, o que a CPU está fazendo no momento está parado e as alternâncias de fluxo do programa a uma rotina de manipulador de interrupção - um código extremamente simples que cuida de notificar o sistema e, em seguida, retorna imediatamente o controle de volta à coisa original que a CPU estava fazendo. Na verdade, ele pode lhe responder muitas perguntas sobre o funcionamento interno do sistema operacional e do próprio computador - como um sistema operacional pode "roubar" a CPU dos aplicativos em execução e embaralhar os recursos da CPU entre diferentes aplicativos executados ao mesmo tempo, mesmo que eles não colaborem.

De volta aos negócios:

Na sua analogia manual do telefone, imagine que o seu telefone não toca realmente. Para saber se você está tendo uma tentativa de telefonema, você terá que olhar para a tela periodicamente e verificar. Para facilitar o gerenciamento do servidor HTTP (já que existem várias camadas que fazem essa verificação periódica), é possível bloquear a tentativa de verificação.

Então, ao invés de verificar, vendo que não há nada lá e checando novamente, você basicamente fica olhando para 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), de modo que na verdade não requer sua atenção (tempo de CPU).

Isso é aprimorado ainda mais por técnicas que permitem monitorar muitas conexões de uma só vez (IOCP). Isso fica cada vez mais perto do sistema de chamadas telefônicas - você tem uma sala com dez mil telefones, mas você só se importa com aqueles que estão tocando no momento, os outros não estão tomando sua atenção.

    
por 31.10.2014 / 10:38
9

Os computadores usam um conceito chamado "portas", análogo às "extensões" de 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 de wikipedia ), por exemplo a porta 80 é o padrão para HTTP.

O truque é que um programa, por ex. um servidor web, pode se registrar para escutar em uma porta particular. Em seguida, o sistema operacional transmitirá todas as solicitações recebidas nessa porta para esse programa.

O objetivo 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 que não interferirão entre si.

    
por 31.10.2014 / 06:35
3

Webserver notificado com o seguinte processo

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

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

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

Atlast cria um socket com a chamada de sistema socket ().

Espero que isso ajude!

    
por 31.10.2014 / 06:45
0

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

access.log
error.log
other_vhosts_access.log

Relaciona-se com o que você quer do cliente e como notificar, sms, e-mail e assim por diante.

Minha sugestão:

Você pode criar um servidor de log e enviar todos os seus logs, como servidor de e-mail, servidor dns, servidor web e assim por diante. Então você pode analisá-lo. Mesmo servidor usa db e você pode executar a consulta.

    
por 31.10.2014 / 06:04
0

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

Assim, sempre que algo for recebido nessa porta específica, o sistema chamará essa função de retorno de chamada registrada anteriormente. Dentro dessa chamada de volta, pode definir um evento ou algo parecido e, em seguida, o servidor da Web teria um thread dedicado esperando nesse evento. Este encadeamento executará e enfileirará essa solicitação na lista principal de solicitações que o servidor da Web já está processando.

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

    
por 31.10.2014 / 08:58

Tags