Un paio di breaking changes di IE7 (che non riguardano solo la programmazione per il web)

In questi giorni ho dovuto mettere le mani su un "vecchio" sistema costituito da alcuni webservice erogati da servlet jsp e da un'applicazione vb6 che comunica con i servizi remoti tramite un oggetto Inet (e quindi, sotto sotto, tramite le librerie messe a disposizione da Internet Explorer).

Il motivo dell'intervento era dato dal fatto che, installando IE7 nei pc in cui girava l'applicativo lato client, si ottenevano dei malfunzionamenti in un paio di punti dell'applicazione: nel caso servissero anche a qualcun altro, riporto qui le soluzioni.

  • Problema di timeout (errore 12002):
    Internet Explorer 7 ha un tempo di attesa delle risposte inferiore rispetto a quello di default delle versioni precedenti (IE7 ha 30 secondi di timeout, non so di preciso il valore per le versioni precedenti).
    In questo caso, capitava che il programma vb richiedeva un servizio all'applicativo remoto, ma questo impiegava più di 30 secondi a ritornare i risultati, così si aveva un errore di timeout (mentre con IE6 tutto aveva sempre funzionato bene).
    Per risolvere il problema, dato che l'oggetto Inet ha una proprietà RequestTimeout che non è influente in questo caso, bisogna aggiungere un valore di tipo DWORD chiamato ReceiveTimeout alla chiave di registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings . Il valore di questa chiave è espresso in millisecondi; una volta impostato, occorre riavviare prima di vederlo in azione (ulteriori info qui: http://support.microsoft.com/?scid=kb%3Ben-us%3B181050&x=15&y=11)
  • Problema nel contenuto di un file (byte 'troncati'):
    la solita applicazione vb richiedeva un servizio all'applicazione remota di java, e questa restituiva il risultato sotto forma di file costituito da alcuni byte: con IE6, il file restituito era quello corretto da 93 byte (di cui 92 effettivi ed 1 di crc, aggiunto dall'applicativo java), mentre con IE7 venivano restituiti solamente 92 byte.
    Passando la richiesta tramite firefox (inserendo a mano l'url del servizio richiesto), anche qui il file restituito era da 93 byte, come atteso.
    Analizzando il traffico HTTP tramite Fiddler, ho notato che in realtà anche da IE7 il contenuto dei dati ricevuto era da 93 byte, ma nell'intestazione HTTP il Content-Length era impostato a 92.
    In breve, guardando il codice dell'applicativo Java che generava questo file, ho scoperto che il bug risiedeva in esso (il Content-Length veniva impostato a 92 byte e non a 93, chi ha scritto il codice si era dimenticato di aggiungere la lunghezza del byte di crc), ed IE7 non faceva altro che considerare il Content-Length passato (e a rigor di logica, il suo comportamento sarebbe anche il più corretto), mentre evidentemente IE6 e Firefox considerano la lunghezza dei dati ricevuti e non tanto l'intestazione HTTP relativa.