Differenza tra Node.Js e Apache

rob25111

Nuovo Utente
38
0
Mi chiedo quale sia la differenza tra node.js e Apache.

mi spiego:
Node.js è JavaScript lato server .. server che nel 99% utilizza Apache (che “configurabile” per accettare richieste PHP , Python , e magari altri linguaggi che supporta quest ultimo).

ora se io le richieste al server le faccio in PHP (o in Python ad esempio)dovrei Inoltrare il tutto (come stringa) all interprete Node.js vero ? Così facendo non perdo tempo e magari i benefici di Node dei quali tutti parlano ? Dovendo quindi parzialmente utilizzare php ancora vero?

a questo punto..la soluzione sarebbe un web server basato su node.js o magari scritto in node/js??

per schiarirmi bene le idee:
Cos e che fa un web server software come Apache in poche parole? (Scherzo anche tante di parole.. non sono pigro)

P.s credo abbia questi dubbi perché non conosco bene il funzionamento del browser e del server.. conoscete qualche libro/documento/fonte da consigliarmi ?
 
Ultima modifica:

icox

Utente Attivo
497
246
Nodejs e' un runtime javascript basato su V8, quindi uno strumento che e' in grado di eseguire istruzioni scritte in javascript. Puo' essere usato come "server" e come tante altre cose, dipende strettamente dal tuo codice.

Apache invece e' un webserver, ovvero un'applicativo in genere esposto sulla rete e che accetta richieste dall'esterno, le elabora ed eventualmente restituisce una risposta. Questa "elaborazione" puo' essere qualunque cosa, una semplice risorsa statica (ad esempio un file html o un'immagine) oppure l'output di un software anche molto complesso. Offre inoltre un set di strumenti per la configurazione/gestione di indirizzi, permessi, autenticazione, redirect e quant'altro.

E' abbastanza comune usare questi strumenti insieme: scrivi il tuo applicativo in node.js e lasci che sia Apache a gestire la richieste: quando un client fara' una richiesta il webserver si occupera' di inoltrarla al tuo applicativo e quest'ultimo, se avra' un'output/risposta, lo inviera' al webserver il quale lo rispedira' al client.
Ovviamente al posto di Apache puoi usare anche altro (io mi trovo meglio con nginx) cosi come al posto di node puoi usare altri strumenti.

Personalmente uso molto questo approccio per le API di piccole/medie dimensioni, e' un sistema efficace e semplice da gestire.
 

rob25111

Nuovo Utente
38
0
teoricamente sì potrebbe programmare un web server usando nodejs quindi?

non capisco ora il ruolo di PHP rispetto Apache .. può farmi qualche esempio ?

Nodejs e' un runtime javascript basato su V8, quindi uno strumento che e' in grado di eseguire istruzioni scritte in javascript. Puo' essere usato come "server" e come tante altre cose, dipende strettamente dal tuo codice.

Apache invece e' un webserver, ovvero un'applicativo in genere esposto sulla rete e che accetta richieste dall'esterno, le elabora ed eventualmente restituisce una risposta. Questa "elaborazione" puo' essere qualunque cosa, una semplice risorsa statica (ad esempio un file html o un'immagine) oppure l'output di un software anche molto complesso. Offre inoltre un set di strumenti per la configurazione/gestione di indirizzi, permessi, autenticazione, redirect e quant'altro.

E' abbastanza comune usare questi strumenti insieme: scrivi il tuo applicativo in node.js e lasci che sia Apache a gestire la richieste: quando un client fara' una richiesta il webserver si occupera' di inoltrarla al tuo applicativo e quest'ultimo, se avra' un'output/risposta, lo inviera' al webserver il quale lo rispedira' al client.
Ovviamente al posto di Apache puoi usare anche altro (io mi trovo meglio con nginx) cosi come al posto di node puoi usare altri strumenti.

Personalmente uso molto questo approccio per le API di piccole/medie dimensioni, e' un sistema efficace e semplice da gestire.
 

icox

Utente Attivo
497
246
Teoricamente si puo' programmare qualsiasi cosa... E si, con node puoi creare un server web (se ti interessa dai un'occhiata alla documentazione)

PHP di per se e' un linguaggio, esattamente come lo e' Javascript.

Anche usando PHP la logica rimane la medesima: il web server rimane il soggetto incaricato di ricevere e gestire le richieste dei client. Nel caso di PHP, senza entrare troppo nei dettagli, il web server chiamera' un eseguibile che e' in grado di processare (da qui PHP: Hypertext Preprocessor) un file .php e generare un .html che verra' poi inviato (dal web server) al client che ha fatto richiesta.

Il binomio webserver - app (node, php... quello che ti pare) e' abbastanza comune, perche' ti permette di concentrarti sulla tua applicazione delegando la gestione delle richieste ad un web server che e' nato per questo scopo. Inoltre, parere personale, semplifica parecchio la vita quando hai diverse applicazioni, magari scritte in linguaggi diversi, sullo stesso server.
Nulla vieta comunque di farselo da soli se lo si ritiene opportuno/vantaggioso, nel caso di nodejs tiri su un server web con una manciata di righe.
 

rob25111

Nuovo Utente
38
0
Apache quindi teoricamente è quindi staccato da che tipo di linguaggio è usato nel backend ? Lui restituirà solo una stringa al client indipendentemente da come questa stringa è generata ?
È 100% corretto questo che ho detto?
2. Come funzionano invece tecnologie con Ajax ? Apache (o un web server in generale) come ne è complice ?


Teoricamente si puo' programmare qualsiasi cosa... E si, con node puoi creare un server web (se ti interessa dai un'occhiata alla documentazione)

PHP di per se e' un linguaggio, esattamente come lo e' Javascript.

Anche usando PHP la logica rimane la medesima: il web server rimane il soggetto incaricato di ricevere e gestire le richieste dei client. Nel caso di PHP, senza entrare troppo nei dettagli, il web server chiamera' un eseguibile che e' in grado di processare (da qui PHP: Hypertext Preprocessor) un file .php e generare un .html che verra' poi inviato (dal web server) al client che ha fatto richiesta.

Il binomio webserver - app (node, php... quello che ti pare) e' abbastanza comune, perche' ti permette di concentrarti sulla tua applicazione delegando la gestione delle richieste ad un web server che e' nato per questo scopo. Inoltre, parere personale, semplifica parecchio la vita quando hai diverse applicazioni, magari scritte in linguaggi diversi, sullo stesso server.
Nulla vieta comunque di farselo da soli se lo si ritiene opportuno/vantaggioso, nel caso di nodejs tiri su un server web con una manciata di righe.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Secondo me hai molta confusione...

Creare un server in PHP è sicuramente molto sconsigliato (per così tante ragioni che anche sulla doc PHP dicono esplicitamente di non usarlo in contesti reali); in NodeJs è fattibile, ma è meglio appoggiarsi a qualcosa di consolidato, se non altro per ragioni di sicurezza.

I linguaggi come PHP, Node, Go, Java... sono solo dei linguaggi di backend, che solitamente interagiscono anche con un database. Quando richiedi un documento (come una pagina web, come questa del forum) avviene un elaborazione lato backend della tua richiesta (la scambio di informazioni tra client e server) e ti viene data una copia della pagina dopo la sua elaborazione; l'elaborazione è del codice lato backend (PHP, Node etc etc).

Apache è un server, come nginx e altri. Rimangono in ascolto in attesa di una connessione su una particolare porta (HTTP usa la 80), e quando ciò avviene, rispondono (inviando la pagina... semplificando).
Non ho capito cosa intendi con "restituirà una stringa al client".

Ajax lo si usa lato client, lo puoi usare per fare richieste, l'acronimo sta per Asynchronous JavaScript And XML; detto in due parole lo si usa per fare richieste e ricevere risposte dal backend senza aggiornare l'intero documento ma solo una parte del documento.
Qui trovi altre info: https://developer.mozilla.org/en-US/docs/Web/Guide/AJAX
 
  • Mi piace
Reazioni: Moffetta88

rob25111

Nuovo Utente
38
0
Ok.. ma come fa un linguaggio come php a interagire direttamente con il DOM?

esempio: se io uso Python per generare un documento ho bisogno di usare librerie che “convertano” il tutto e reindirizzino l html..
In php invece questo non c’è bisogno.. questo perché php integra quelle funzioni nella sintassi base? (Essendo un linguaggio nato per questo uso)
Secondo me hai molta confusione...

Creare un server in PHP è sicuramente molto sconsigliato (per così tante ragioni che anche sulla doc PHP dicono esplicitamente di non usarlo in contesti reali); in NodeJs è fattibile, ma è meglio appoggiarsi a qualcosa di consolidato, se non altro per ragioni di sicurezza.

I linguaggi come PHP, Node, Go, Java... sono solo dei linguaggi di backend, che solitamente interagiscono anche con un database. Quando richiedi un documento (come una pagina web, come questa del forum) avviene un elaborazione lato backend della tua richiesta (la scambio di informazioni tra client e server) e ti viene data una copia della pagina dopo la sua elaborazione; l'elaborazione è del codice lato backend (PHP, Node etc etc).

Apache è un server, come nginx e altri. Rimangono in ascolto in attesa di una connessione su una particolare porta (HTTP usa la 80), e quando ciò avviene, rispondono (inviando la pagina... semplificando).
Non ho capito cosa intendi con "restituirà una stringa al client".

Ajax lo si usa lato client, lo puoi usare per fare richieste, l'acronimo sta per Asynchronous JavaScript And XML; detto in due parole lo si usa per fare richieste e ricevere risposte dal backend senza aggiornare l'intero documento ma solo una parte del documento.
Qui trovi altre info: https://developer.mozilla.org/en-US/docs/Web/Guide/AJAX
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
PHP non interagisce con il DOM, lo puoi "mischiare" con l'HTM e il codice lato client, ma l'elaborazione avviene comunque lato server.
PHP viene interpretato lato server ed eseguito lato server. Ciò che arriva al client (la pagina HTML) è il risultato dell'elaborazione del PHP + il codice lato client (HTML, JS etc).

Ti faccio un esempio stupido:
PHP:
<?php
$n = rand() % 100;
echo "<h1>Numero random: " . $n."</h1";
?>

Quando lo esegui lato client ricevi solo il tag H1 con il contenuto (il nr. generato). Puoi verificarlo guardando il sorgente HTML della pagina.
 
  • Mi piace
Reazioni: Moffetta88

rob25111

Nuovo Utente
38
0
quindi il php non viene mai consegnato al client vero? E quindi il file html “base” ( con il php) è come se generasse un nuovo html “compilato/interpretato” ??

PHP non interagisce con il DOM, lo puoi "mischiare" con l'HTM e il codice lato client, ma l'elaborazione avviene comunque lato server.
PHP viene interpretato lato server ed eseguito lato server. Ciò che arriva al client (la pagina HTML) è il risultato dell'elaborazione del PHP + il codice lato client (HTML, JS etc).

Ti faccio un esempio stupido:
PHP:
<?php
$n = rand() % 100;
echo "<h1>Numero random: " . $n."</h1";
?>

Quando lo esegui lato client ricevi solo il tag H1 con il contenuto (il nr. generato). Puoi verificarlo guardando il sorgente HTML della pagina.
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
quindi il php non viene mai consegnato al client vero? E quindi il file html “base” ( con il php) è come se generasse un nuovo html “compilato/interpretato” ??
Il PHP non viene consegnato al client. Prova a fare un'ispezione della pagina e vedrai che non c'è nessuna traccia di PHP o qualsiasi linguaggio lato backend. Se aessi la possibilità di vedere anche il file PHP, bhè, si potevano fare tantissime cose ahaha
 

rob25111

Nuovo Utente
38
0
tipo ? Avere accesso al database ?
Può farmi qualche esempio?
Non che mi serve tanto ma mi migliorerebbe il quadro e stimolerebbe la curiosità a approfondire molto a fondo

.. mi conosco :)
Il PHP non viene consegnato al client. Prova a fare un'ispezione della pagina e vedrai che non c'è nessuna traccia di PHP o qualsiasi linguaggio lato backend. Se aessi la possibilità di vedere anche il file PHP, bhè, si potevano fare tantissime cose ahaha
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Scusa ma... non fai prima a questo punto a provare "sul campo" seguendo ciò che ti stiamo dicendo, così da sperimentare direttamente? Sono certo che in questo modo alcuni concetti li capiresti più a fondo, ad iniziare da come funziona PHP e la differenza che c'è con il front-end.
Ad esempio, se utilizzi Windows, scarica XAMPP. Trovi già PHP + Apache + MySQL/MariaDB (il database). Già solo con questo puoi provare quelle due righe di codice che ti ho mostrato sopra.

Comunque penso proprio che ibernato si riferisca tanto alle logiche usate nel codice PHP, quanto a ciò che dici anche tu, ovvero comprendere magari come si chiamano le tabelle del database (e le colonne) oltre che ad una serie di altre cose: un esempio può essere vedere come vengoo validati i dati letti in input (quelli inviati da un form HTML).

Ti farei qualche esempio "pratico", ma devi essere tu a dire su cosa di preciso.
 

pabloski

Utente Èlite
2,868
916
@rob25111: ti stai pericolosamente avvitando, fino al punto di non capirci più niente.

Partiamo dal presupposto che ogni software che voglia comunicare su una rete telematica, lo fa tramite socket. Crea un socket e si mette in ascolto su una data porta. Tramite questo socket è in grado di ricevere le richieste di connessione da parte di altre entità.

Apache fa questo. Apre il suo socket e ascolta. Appena un client/browser gli chiede una connessione, crea un altro socket appositamente per il nuovo client e userà quello per scambiare i messaggi.

Chiaro che qualsiasi software in grado di usare i socket ( o astrazioni degli stessi ) può fare altrettanto. Node.js è un ambiente runtime basato su V8 e quindi è in grado di eseguire codice Javascript. Rispetto al V8 usato nei browser, ha una serie di estensioni che gli consentono di interagire col sistema operativo in maniera "completa". Questo gli permette di usare i socket. A questo punto credo sia chiaro che un programma Node.js è in grado di fare quello che fa Apache.

E PHP? Può fare le stesse cose https://www.php.net/manual/en/book.sockets.php

E Python? Hai voglia.

Non esistono ambienti di programmazione che vivano confinati nel web server ( Apache, Nginx e compagnia ).

E allora come interagiscono con un web server? Un tempo si usava l'interfaccia CGI ( ed è ancora usata in certi casi ), che si basa sul redirezionamento degli standard stream. Uno standard stream è un canale virtuale di comunicazione usato da sempre nei sistemi operativi. Hai presente lo standard input del C? Standard output? Standard error? Questi sono gli stream standard. Nei sistemi Unix è visibile ed utilizzabile esplicitamente il meccanismo del redirezionamento di questi stream.

Hai mai visto questo simbolo | in un comando Linux? Questo è il simbolo di pipe e consente d'inviare l'output del comando a sinistra del simbolo nell'input del comando a destra. Il tutto avviando i due comandi/programmi specificati.

Cioè

Codice:
cat pippo.txt | grep stream

Sto dicendo che deve listare il contenuto di pippo.txt ed inviarlo al comando grep che cercherà la stringa stream al suo interno. Cat è un comando della shell e vabbè...ma grep è un programma e la shell deve prima avviarlo per poter eseguire la mia pipe.

Chiaro il punto? Apache è in grado, tramite CGI, di avviare lo script specificato ( in PHP, Python o che altro ), redirezionare gli stream di input e output e di fatto comunicare con lo script in maniera bidirezionale. E' evidente che così puoi fare quello che ti pare. Apache comunica con i client e può inviare/ricevere parte dei dati ricevuti/da inviare al client allo script specificato.

E lo script potrebbe benissimo essere un programma in C++!! Mica solo i linguaggi di scripting possono farlo.

Attualmente Apache e compagnia implementano moduli nativi che consentono d'interagire con gli script in maniera più efficiente. Ma il concetto di base è sempre quello.

Detto questo, l'esecuzione e il codice dello script restano confinati sul server. Lo script invia il suo output ad Apache e Apache lo gira al client. E quest'output dev'essere qualcosa che il client possa capire. I browser, per esempio, capiscono solo Html, Css e Javascript. Punto. Se gl'invii codice PHP semplicemente non sanno che farsene.

Ed è la ragione per cui DispatchCode scrive "PHP non interagisce col DOM". Non può. Il DOM è una rappresentazione del documento html che sta nel browser, ma il codice non può accedere a quello che sta nel browser. Lui è confinato all'interno del server. Solo uno script Javascript che venga inviato al browser ( uno script Node.js che gira sul server non è in esecuzione nel browser, ma sta sul server!!! ) può interagire col DOM.

Stesso discorso vale per Webassembly.

Per cui non confondere il fatto che un web server come Apache abbia dei meccanismi per avviare ed interagire con degli script e/o programmi sul server, con quello che degli script e/o programmi possano fare.

Un programma/script è un programma e può fare tutto, compreso usare meccanismi di comunicazione su reti telematiche e meccanismi di ipc che gli consentano di comunicare con altri programmi in esecuzione sullo stesso computer.

E chiunque sia in grado di usare i socket, può fungere da server di qualsiasi tipo, web server compresi. Tant'è che Node.js e Go sono usati spessissimo per creare i cosidetti web services, cioè dei serverini specificamente creati per rispondere a certi tipi di richieste da parte dei client. Chiaro che un web server completo in Node.js sarebbe folle, dato che ti basta installare Apache, Nginx, Lighttpd e similari. Perchè reinventare la ruota?
 
  • Mi piace
Reazioni: Moffetta88

rob25111

Nuovo Utente
38
0
Qui si fa delicata la cosa e non capisco molto.
Apache (o un web server in generale a questo punto) come fa ad avviare uno specifico script ? Ci saranno dei file di configurazione ?

esempio da quel che ho capito:
Apache Apre un socket “di benvenuto” su cui ascolta (ad esempio su porta 80).
Non appena un client invia una richiesta Apache crea un socket specifico facendo L handshake e avvia la comunicazione (domanda stupida: una semplice WEB app utilizza TCP vero? ).
Ora : il client aveva precedentemente richiesto durante il benvenuto ( o la fa ora? ) la pagina/risorsa denominata “Homepage”.
Homepage è in realtà una pagina fortemente dinamica.
Magari generata usando Python e Php.
Come fa a sapere Apache quale script deve eseguire e in che ordine ? (Per errore potrebbe magari dare in risposta la semplice “homepage.html” che magari dentro ha solo il footer :D non ancora processata ).
Apache quindi “sniffa” già nella pagina per vedere se ci sono script ?di fatto leggendola ogni volta .. Se si come ?
O a fare questo sono programmi “CGI” (possono chiamarsi così ? “Programmi CGI? )

Chiaro il punto? Apache è in grado, tramite CGI, di avviare lo script specificato ( in PHP, Python o che altro ), redirezionare gli stream di input e output e di fatto comunicare con lo script in maniera bidirezionale. E' evidente che così puoi fare quello che ti pare. Apache comunica con i client e può inviare/ricevere parte dei dati ricevuti/da inviare al client allo script specificato.

E lo script potrebbe benissimo essere un programma in C++!! Mica solo i linguaggi di scripting possono farlo.

Attualmente Apache e compagnia implementano moduli nativi che consentono d'interagire con gli script in maniera più efficiente. Ma il concetto di base è sempre quello.

Detto questo, l'esecuzione e il codice dello script restano confinati sul server. Lo script invia il suo output ad Apache e Apache lo gira al client. E quest'output dev'essere qualcosa che il client possa capire. I browser, per esempio, capiscono solo Html, Css e Javascript. Punto. Se gl'invii codice PHP semplicemente non sanno che farsene.

Ed è la ragione per cui DispatchCode scrive "PHP non interagisce col DOM". Non può. Il DOM è una rappresentazione del documento html che sta nel browser, ma il codice non può accedere a quello che sta nel browser. Lui è confinato all'interno del server. Solo uno script Javascript che venga inviato al browser ( uno script Node.js che gira sul server non è in esecuzione nel browser, ma sta sul server!!! ) può interagire col DOM.

Stesso discorso vale per Webassembly.

Per cui non confondere il fatto che un web server come Apache abbia dei meccanismi per avviare ed interagire con degli script e/o programmi sul server, con quello che degli script e/o programmi possano fare.

Un programma/script è un programma e può fare tutto, compreso usare meccanismi di comunicazione su reti telematiche e meccanismi di ipc che gli consentano di comunicare con altri programmi in esecuzione sullo stesso computer.

E chiunque sia in grado di usare i socket, può fungere da server di qualsiasi tipo, web server compresi. Tant'è che Node.js e Go sono usati spessissimo per creare i cosidetti web services, cioè dei serverini specificamente creati per rispondere a certi tipi di richieste da parte dei client. Chiaro che un web server completo in Node.js sarebbe folle, dato che ti basta installare Apache, Nginx, Lighttpd e similari. Perchè reinventare la ruota?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Qui si fa delicata la cosa e non capisco molto.
Apache (o un web server in generale a questo punto) come fa ad avviare uno specifico script ? Ci saranno dei file di configurazione ?

esempio da quel che ho capito:
Apache Apre un socket “di benvenuto” su cui ascolta (ad esempio su porta 80).
Non appena un client invia una richiesta Apache crea un socket specifico facendo L handshake e avvia la comunicazione (domanda stupida: una semplice WEB app utilizza TCP vero? ).
Ora : il client aveva precedentemente richiesto durante il benvenuto ( o la fa ora? ) la pagina/risorsa denominata “Homepage”.
Homepage è in realtà una pagina fortemente dinamica.
Magari generata usando Python e Php.
Come fa a sapere Apache quale script deve eseguire e in che ordine ? (Per errore potrebbe magari dare in risposta la semplice “homepage.html” che magari dentro ha solo il footer :D non ancora processata ).
Apache quindi “sniffa” già nella pagina per vedere se ci sono script ?di fatto leggendola ogni volta .. Se si come ?
O a fare questo sono programmi “CGI” (possono chiamarsi così ? “Programmi CGI? )

Quando tu richiedi una risorsa, che sia una pagina web o un altro file, questo avrà un percorso ben definito.
Il trasferimento avviene poi utilizzando HTTP.
Il protocollo utilizzato dipende dalle necessità e dal tipo di appplicazione. Per le pagine internet viene utilizzato TCP; per quel tipo di risorse invece necessarie con più rapidità (il TCP è un protocollo sicuro, vale a dire che se qualcosa non va a buon fine il server rimanda il pacchetto) viene utilizzato UDP, che è un protocollo non sicuro.

Stai confondendo il server che sta in attesa di connessioni con l'elaborazione da parte dell'interprete (che avviene ovviamente prima dell'invio del documento). Il modo in cui client/server comunicano dipende dal protocollo utilizzato.
Il PHP è un linguaggio interpretato, vale a dire che sulla macchina che ospita Apache deve essere installato anche PHP (l'interprete). Quando richiedi un documento questo non ha un estensione a caso; la configurazione di default prevede l'estensione ".php". Se come estensione usi "txt" o altro, non è detto che il file che hai richiesto venga interpretato... cosa significa?
Anni fa alcuni programmatori usavano una brutta pratica (a mio avviso): quando un file PHP veniva incluso da un altro file PHP, questo file aveva come estensione ".inc". Se non si configurava correttamente il tutto lato server, il file ".inc" non veniva interpretato e quindi veniva restituito al browser il contenuto con il codice PHP in chiaro.
Chiaramente deve essere anche presente il tag di apertura di PHP.

Se vuoi farti del male, puoi guardare l'rfc ufficiale sulle specifiche di HTTP sul dettaglio di come avviene la comunicazione: https://tools.ietf.org/html/rfc7540
In estrema sintesi: la richiesta è composta da un header e da un body. L'header contiene il tipo di dato richiesto, così che il client sappia come comportarsi. La richiesta avviene utilzzando un metodo (GET/POST ad esempio). Quando posizioni il cursore sulla barra degli indirizzi e premi Invio (o "cerca") stai facendo una richiesta usando GET. Puoi verificarlo premendo F12 e guardando la scheda "Rete".

Su Wiki trovi un sacco di risorse, oltre ai vari RFC di specifica: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Comunque il discorso presuppone una conoscenza di base dettata da un minimo di esperienza nell'utilizzo di un linguaggio come PHP e dell'aver installato Apache, o un altro server web, altrimenti temo che aumenteranno i dubbi.

Ps. se vuoi esplorare un pò il modo in cui funzionano i protocolli e le info che transitano al momento in cui stabilisci una connessione, puoi scaricare Wireshark o un software analogo.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!