close

XMLHttpRichiesta

Vai alla navigazione Vai alla ricerca

XMLHttpRequest (XHR) , noto anche come XMLHTTP ( Extensible Markup Language/Hypertext Transfer Protocol ), è un'interfaccia utilizzata per effettuare richieste HTTP e HTTPS ai server Web. Qualsiasi codifica basata su testo viene utilizzata per i dati trasferiti, inclusi: testo normale, XML , JSON , HTML e codifiche private specifiche. L'interfaccia è implementata come una classe di cui un'applicazione client può generare tutte le istanze necessarie per gestire il dialogo con il server.

L'uso più popolare, anche se non l'unico, di questa interfaccia è fornire contenuto dinamico e aggiornamenti asincroni alle pagine Web utilizzando tecnologie basate su di essa come AJAX .

Storia

La prima versione dell'interfaccia XMLHttpRequest è stata sviluppata da Microsoft , che l'ha introdotta nella versione 5.0 di Internet Explorer . [ 1 ] Questa prima versione è stata pubblicata utilizzando un oggetto ActiveX , il che significa che poteva essere utilizzata da qualsiasi ambiente di sviluppo software con supporto per questa tecnologia, cioè praticamente tutte le piattaforme di sviluppo generali per Microsoft Windows . Microsoft ha continuato a mantenere e aggiornare questa tecnologia includendo la funzionalità all'interno di Microsoft XML Parser (MSXML) nelle sue versioni successive. A partire dalla versione 7 di Internet Explorer, l'interfaccia è offerta in modo integrato. [ 1 ]​ Essendo integrato, l'accesso all'interfaccia avviene interamente con oggetti (JScript o VBScript) forniti dal browser e non tramite librerie esterne.

Il progetto Mozilla ha incorporato la prima implementazione integrata di XMLHttpRequest nella versione 1.0 di Mozilla Suite nel 2002. Questa implementazione sarebbe stata seguita da Apple a partire da Safari 1.2, Konqueror , Opera Software a partire da Opera 8.0 e iCab a partire dalla versione 3.0b352 .

Il 27 settembre 2006 il World Wide Web Consortium ha presentato la prima bozza di una specifica di interfaccia standard. [ 2 ] L'attuale versione datata 17 gennaio 2012, denominata XMLHttpRequest Level 2 è il risultato di diverse revisioni. [ 3 ]

Fino al raggiungimento di una versione finale, gli sviluppatori di applicazioni WEB devono tenere conto delle differenze tra le implementazioni o utilizzare pacchetti o framework che svolgono questa funzione.

Evoluzione dell'interfaccia

Il 26 febbraio 2008 è stata rilasciata la prima versione della specifica XMLHttpRequest Level 2 . Questa nuova specifica, che inizia prima della pubblicazione della versione definitiva dell'interfaccia, mira ad aggiungere nuove funzionalità quali: richieste tra domini ( cross-site ), eventi di avanzamento e gestione dei flussi di byte ( stream ) sia per l'invio che per il ricezione.

Implementazione e utilizzo dell'interfaccia

XMLHttpRequest è un'interfaccia per effettuare chiamate su HTTP , quindi si consiglia una buona conoscenza di questo protocollo. È importante la corretta gestione della cache nel server HTTP, nei proxy di cache intermedi e nel browser WEB.

L'interfaccia è implementata in una classe che deve essere istanziata utilizzando il costruttore appropriato . Sono possibili richieste sincrone e asincrone al server. Quando le operazioni sono sincrone, l'esecuzione del programma si interrompe fino al completamento dell'operazione. In una chiamata asincrona, il flusso del processo non si ferma in attesa della risposta, ma continua in background e viene definito un gestore di eventi che verrà eseguito al completamento della richiesta.

Identificazione del set di caratteri

Un altro elemento importante nella specifica è la gestione di set di caratteri o fogli di codice. La codifica e la decodifica del testo e l'identificazione di set di caratteri utilizzando intestazioni HTTP e tipi MIME . Lo standard XMLHttpRequest consiglia UTF-8 per la codifica delle stringhe. [ 3 ]

Per determinare la codifica dei dati trasmessi, viene utilizzato il seguente algoritmo, utilizzando la prima opzione soddisfatta:

  • Se i dati trasmessi sono XML o HTML, e sono quindi identificati dall'intestazione HTTP Content-Type corrispondente , la codifica verrà rilevata seguendo le regole XML o HTML a seconda dei casi.
  • Se l'intestazione HTTP specifica un tipo MIME tramite Content-Type e identifica un set di caratteri, viene utilizzato quel set di caratteri.
  • Se i dati inviati specificano una distinta base valida , verrà utilizzata la variante UTF determinata da tale distinta base.
  • Usa UTF-8.

Se la codifica non viene identificata correttamente, esiste il rischio che si verifichino errori di visualizzazione dei caratteri in un sistema in cui più codifiche sono miste. Ad esempio, quando si incorpora la funzionalità AJAX, che per impostazione predefinita utilizza UTF-8, in una pagina WEB codificata con ISO 8859-1 .

Attributi

Attributo Descrizione
stato pronto Restituisce lo stato dell'oggetto come segue:

0 = non inizializzato, 1 = aperto, 2 = intestazioni ricevute, 3 = caricamento e 4 = completato.

rispostaCorpo (Livello 2) Restituisce la risposta come matrice di byte
testo di risposta Restituisce la risposta come stringa
responseXML Restituisce la risposta come XML. Questa proprietà restituisce un oggetto documento XML, che può essere esaminato utilizzando le proprietà ei metodi dell'albero Document Object Model .
stato Restituisce lo stato come numero (ad es. 404 per "Non trovato" e 200 per "OK").
statusText Restituisce lo stato come stringa (ad es. "Non trovato" o "OK").

Metodi

Metodo Descrizione
abortire() Annulla la richiesta corrente
getAllResponseHeaders() Restituisce il set di intestazioni HTTP come stringa.
getResponseHeader( headerName ) Restituisce il valore dell'intestazione HTTP specificata.
aprire

( metodo, URL [, asincrono
[, nome utente [, chiave]]] )

Specifica il metodo, l'URL e altri attributi facoltativi di una richiesta.

Il parametro del metodo può assumere i valori "GET", "POST" o "PUT" ("GET" e "POST" sono due modi per richiedere i dati, con "GET" i parametri di richiesta sono codificati in URL e con "POST " nelle intestazioni HTTP).

Il parametro URL può essere un URL completo o relativo.

Il parametro asincrono specifica se la richiesta verrà gestita in modo asincrono o meno. Un valore true indica che l'elaborazione dello script continua dopo il metodo send(), senza attendere la risposta, e false indica che lo script si interrompe fino al completamento dell'operazione, dopodiché l'esecuzione riprende.

Nel caso asincrono vengono specificati gestori di eventi, che vengono eseguiti ad ogni cambio di stato e consentono di elaborare i risultati della query una volta ricevuti, o di gestire eventuali errori.

invia i dati]) Invia la richiesta
setRequestHeader( etichetta, valore ) Aggiungi una coppia tag/valore all'intestazione HTTP da inviare.

Eventi

Proprietà Descrizione
onreadystatechange Evento che si attiva ad ogni cambio di stato.
aborto (Livello 2) Evento che viene generato quando l'operazione viene interrotta.
caricamento (Livello 2) Evento che si attiva al completamento della carica.
onloadstart (Livello 2) Evento che viene generato all'avvio del caricamento.
in corso (Livello 2) Evento che si attiva periodicamente con informazioni sullo stato.

La proposta iniziale del W3C non include le proprietà e gli eventi presenti nelle implementazioni effettive, come gli eventi onload , onerror , onprogress , onabort e ontimeout . Alcuni di essi sono inclusi nella nuova specifica di Livello 2 , come si può vedere nella tabella sopra.

Istanziazione dell'oggetto

Di seguito è riportato un possibile codice JavaScript che permette di creare l'oggetto tenendo conto delle differenze tra i browser più diffusi.

	var  httpRichiesta ; 
	if  ( window . XMLHttpRequest ) 
	{ 
		//Il browser implementa nativamente l'interfaccia 
		httpRequest  =  new  XMLHttpRequest (); 
	}  
	else  if  ( window . ActiveXObject ) 
	{ 
		// Browser consente di creare oggetti ActiveX 
		try  { 
			httpRequest  =  new  ActiveXObject ( "MSXML2.XMLHTTP" ); 
		}  cattura  ( e )  { 
			prova  { 
				httpRequest  =  new  ActiveXObject ( "Microsoft.XMLHTTP" ); 
			}  catch  ( e )  {} 
		} 
	} 
	if  ( ! httpRequest ) 
	{ 
		alert ( "Impossibile creare un'istanza XMLHttpRequest" ); 
	}

Vedi anche

  • AJAX , tecnica di sviluppo web per creare applicazioni interattive
  • SOAP , protocollo di comunicazione tramite scambio dati XML
  • XML , JSON , per il trasferimento di informazioni

Riferimenti

  1. a b Microsoft. "Informazioni su XMLHTTP nativo " . Estratto il 22 maggio 2012 . 
  2. ^ Anne van Kesteren; Dean Jackson (5 aprile 2006). "L'oggetto XMLHttpRequest " . W3C. 
  3. ^ a b Anne van Kesteren (17 gennaio 2012). "XMLHttpRequest livello 2" (in inglese) . W3C. 

Collegamenti esterni