Dopo moltissimo tempo torno a scrivere! Questa volta ho un preciso obiettivo. Molti dei post che pubblicherò d’ora in poi potranno sembrare scontati e semplici per qualcuno mentre per me rappresentano dei veri e propri appunti, a breve dovrò sostenere molti esami che mi permetteranno di ricevere diverse certificazioni in ambiente Microsoft, per questo motivo ho deciso di riportare qui un riassunto di ripassi/nuove conoscenze/curiosità/dubbi!

Oggi si parte con una panoramica delle attività svolte tra Client e Server per quanto concerne il funzionamento di una web application. Capire cosa accade durante la navigazione all’interno di un sito web è importante per poter meglio comprendere le mimiche che si nascondono dietro l’interazione con un server IIS. Un Web Browser (Client) ed un Web Server (Server) comunicano tra di loro utilizzando l’HTTP (Hypertext Transfer Protocol) che è un protocollo di rete assegnato alla porta 80, se il server è provvisto di un certificato, la comunicazione può avvenire su porta 443, in questo caso parliamo di HTTPS.

Tipicamente la comunicazione Client/Server prevede diverse operazioni:

  1. L’utente si collega al sito www.sample.com
  2. Il Browser attiva una connessione HTTP con www.sample.com ed inoltra un comando GET, questo comando tenta di accedere al path / (root del sito web) per cui, generalmente, è specificata una pagina di default da caricare. Tecnicamente il comando inoltrato assomiglia a questo:
    GET /
    host http://www.sample.com
  3. Il web server restituisce una risposta preceduta da un HTTP STATUS CODE che ne indica il tipo di contenuto (200 se è stata trovata una pagina web da visualizzare, 404 se la pagina non esiste, 302 se è stato effettuato un inoltro presso un’altra pagina etc. per ulteriori info sugli status code: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).

Volendo entrare nel merito delle attività, possiamo suddividere il lavoro svolto tra Client e Server, il client esegue una serie di operazioni volte alla preparazione ed inoltro/ricezione della richiesta al web server:

  1. Inoltra la richiesta al web server: se, come nell’esempio precedente, dobbiamo accedere a www.sample.com, il browser risolve l’indirizzo ed inoltra la chiamata per la richiesta della pagina.
  2. Autenticazione: se è attiva una connessione HTTPS, la richiesta deve contenere le informazioni necessarie per poter poi essere autenticata dal server.
  3. Elaborazione della risposta: quando il web server restituisce l’output della richiesta il web browser si occupa dell’elaborazione della risposta (es. se il web server ha restituito la pagina, il browser provvede a tradurla in elementi grafici, se invece sono restituiti particolari HTTP STATUS CODE, il web server si comporta nel modo più appropriato per poterli gestire).
  4. Esecuzione di codice Client Side (Scripts): se all’interno della pagina è presente del codice javascript, il browser si fa carico della sua esecuzione.

Questo processo è ripetuto ogni qual volta l’utente clicca su un bottone o seleziona un link. Il Server Web, come è facile immaginare, fa molto più del client. Una serie di processi sono innescati quando una richiesta HTTP arriva, tali processi, in parte operazioni di validazione, in parte comportamenti di contesto, concorrono alla preparazione dell’output finale da inoltrare al client. Quando una richiesta arriva sono eseguite diverse attività:

  1. Validazione: il server verifica che la richiesta sia correttamente strutturata, tale operazione si rende necessaria per evitare l’introduzione di richieste malformate che possono compromettere il corretto funzionamento del web server.
  2. Autenticazione: se la richiesta è in HTTPS (es. https://www.sample.com), è necessario autenticare la chiamata (il tutto avviene utilizzando il Secure Sockets Layer SSL).
  3. Autenticazione dell’utente: se è previsto un particolare meccanismo di autenticazione per l’utente, è necessario applicarlo, nel caso non siano presenti le credenziali necessarie per poter accedere, è visualizzata una maschera di login.
  4. Impostazione delle autorizzazioni dell’utente: successivamente è necessario impostare le autorizzazioni dell’utente, una serie di informazioni che indicano quali sono i permessi disponibili per il profilo connesso.
  5. Determinare come gestire la richiesta: a questo punto il server web deve capire in che modo interpretare ed eseguire la richiesta, se per esempio l’utente ha richiesto una pagina statica provvederà a restituirne il contenuto, se ha chiesto una pagina ASPX provvederà a servirla nel modo corretto.
  6. Gestione degli errori: se si verificano eventuali errori nel determinare il corretto percorso della richiesta, il server web cerca di fornire un dettaglio chiaro dell’errore che si è verificato (es. un Internal Server Error solitamente restituisce uno status code 500).
  7. Cache Output: il web server, provvede ad applicare anche meccanismi di cache con cui è possibile migliorare i tempi di risposta.
  8. Logging: per finire, tutte le operazioni eseguite per la chiamata, generalmente vengono loggate per questioni di sicurezza/monitoring.

La comunicazione descritta tra client e server è gestita mediante l’utilizzo di una richiesta. In ASP.NET è disponibile un oggetto, appunto Request, in cui sono raccolte tutte le informazioni che girano intorno a questa informazione. L’oggetto richiesta contiene informazioni sui Cookies, la cache, la scadenza delle pagine e molto altro. Tecnicamente parlando, il web server restituisce una risposta del genere:

HTTP/1.1 200 OK
Server: Microsoft-IIS/7.0
Content-Type: text/html
Content-Length: 154
<html><head><title>Hello World Sample</title></head><body><p>Hello World Sample Page!</p></body></html>
  • la prima linea indica il protocollo di comunicazione e le informazioni di stato (HTTP STATUS CODE).
  • la seconda linea contiene le informazioni sul tipo di web server che ha generato la risposta (Microsoft-IIS/7.0).
  • la terza linea (Content-Type) indica il tipo di contenuto erogato dal web server. Questo indicatore è anche conosciuto come MIME TYPE (Multipurpose Internet Mail Extensions). In questo esempio il MIME indica che il tipo di file è HTML.
  • la linea successiva contiene informazioni sulla grandezza effettiva del dato restituito.
  • ciò che è presente dopo è il dato vero e proprio che verrà trattato dal web browser in base alle specifiche del Content-Type.

Per ora può bastare, nel prossimo articolo: FORMS, POSTBACK e gestione degli HTTP METHODS.