2011-05-27 8 views
12

Tengo algunos problemas con un código de estado HTTP extraño en MSIE8.¿Por qué MSIE 8 informa un código de estado HTTP de 12150?

puedo enviar un HTTP GET a la siguiente URL:

/cgi-bin/objectBrowser/snap.pl?file_key=28 

De Fiddler, puedo ver que estoy recibiendo la siguiente respuesta prima:

HTTP/1.1 302 Found 
Date: Fri, 27 May 2011 20:24:38 GMT 
Server: Apache/2.2.3 (Red Hat) 
Connection: close 
Content-Type: text/html; charset=ISO-8859-1 
Content-Length: 61 

Location: /cgi-bin/objectBrowser/workWithSnap.pl?snapKey=32 

Esto se generó utilizando la siguiente Perl:

print $cgi->header(-status => '302 Found'); 
print "Location: /cgi-bin/objectBrowser/workWithSnap.pl?snapKey=$snap_key\n\n"; 

estoy usando jQuery para acceder a ella, de la siguiente manera:

jQuery.ajax({ 
    type : "GET", 
    url : "/cgi-bin/objectBrowser/file.pl?pmr=" + request.pmr 
     + "&filename=" + request.filename, 
    statusCode : { 
     200 : function(file_info) { 
      if (file_info.status == "parsing") { 
      jQuery('div#updates').append('<div class="information">No snap yet, but file <i>has</i> been registered already.</div>'); 
      jQuery('div#updates').append('<div class="waiting">Awaiting job completion...</div>'); 
      jQuery.getJSON("/cgi-bin/objectBrowser/job.pl?file_key=" + file_info.file_key, function(job_info) { 
      poll_for_job_completion(job_info); 
       }); 
      } else { 
      jQuery.ajax({ 
       type : "GET", 
      url : "/cgi-bin/objectBrowser/snap.pl?file_key=" + file_info.file_key, 
     statusCode : { 
       302 : function(xhr) { 
       jQuery('div#updates').append('<div class="information">Redirecting to snap</div>'); 
          alert("302: "+ xhr.responseText); 
       process_302(xhr.responseText); 
       } 
        } 
      }); 
     } 
     }, 
     302 : function(xhr) { 
      alert("302: "+ xhr.responseText); 
     process_302(xhr.responseText); 
     }, 
     404 : register_file 
    } 
}); 

Por último, tengo el siguiente para ayudar con la depuración:

jQuery('body').ajaxComplete(function(e,a,o) { 
    console.log('Event: %o\nXHR: %o\nOptions: %o',e,a,o); 
    console.log(o.url); 
    console.log(a.status); 
    console.log(a.responseText); 
}); 

Todo esto funciona bien en Firefox y Chrome, pero en MSIE, donde normalmente recibe un estado de 302 en respuesta a mi solicitud de snap.pl, estoy recibiendo una respuesta de 12150. El mejor hit que he encontrado está en MSDN, lo que sugiere que esto es ERROR_HTTP_HEADER_NOT_FOUND ... pero los encabezados se ven bien para mí.

No puedo entender qué está pasando aquí ... ¿alguien ve algo que pueda estar pasando por alto?

+0

realmente extraño problema. Intente imprimir el encabezado "Ubicación ..." solamente, pero con la URL completa: http: //example.com/cgi-bin ... – silex

Respuesta

4

¡Problema resuelto!

El error fue la generación del encabezado.

El encabezado HTTP resultante tiene una gran brecha y MSIE8 interpreta que Location está en el cuerpo, no en el encabezado.

Mediante el uso de

print $cgi->redirect(-uri => "/cgi-bin/objectBrowser/workWithSnap.pl?snapKey=$snap_key"); 

la cabecera se crea correctamente y me da un comportamiento sensato nuevo

HTTP/1.1 302 Found 
Date: Fri, 27 May 2011 21:00:51 GMT 
Server: Apache/2.2.3 (Red Hat) 
Location: /cgi-bin/objectBrowser/workWithSnap.pl?snapKey=32 
Content-Length: 0 
Connection: close 
Content-Type: text/plain; charset=UTF-8 
+1

El estándar exige que los URI de ubicación sean absolutos, aunque tienden a funcionar como relativos. . Puede montar el método/función 'url()' en CGI para generarlos de forma robusta. – Ashley

+4

Para ser más preciso: fue "interpretado como estando en el cuerpo" porque lo pones en el cuerpo. '$ cgi-> header' imprime * todos * los encabezados y los finaliza :) – hobbs

Cuestiones relacionadas