2011-12-31 14 views
25

¿Hay alguna diferencia entre una solicitud AJAX y una solicitud directa del navegador (en términos de cómo se llama y se carga una página web)?Diferencia entre la solicitud AJAX y una solicitud normal del navegador

En otras palabras, quiero decir: ¿una solicitud directa del lado del servidor se maneja de forma diferente a una solicitud del lado del cliente (iniciada por el navegador)?

Respuesta

18

una petición AJAX es idéntica a una petición del navegador "normal" en cuanto a la al servidor le preocupan otros encabezados HTTP potencialmente diferentes. p.ej. Chrome envía:

X-Requested-With:XMLHttpRequest 

No estoy seguro de si esa cabecera ha sido estandarizada o no, o si es diferente en cada navegador o incluso incluyó en absoluto en todos los navegadores.


edit: lo dicho, que la cabecera se envía por jQuery (y otras bibliotecas JS probable), no el navegador como se evidencia por:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/'); 
xhr.send(); 

que envía:

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Cookie: .... 
Host:stackoverflow.com 
If-Modified-Since:Sat, 31 Dec 2011 01:57:24 GMT 
Referer:http://stackoverflow.com/questions/8685750/how-does-an-ajax-request-differ-from-a-normal-browser-request/8685758 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11 

lo que me lleva a la conclusión de que por defecto no hay absolutamente ninguna diferencia.

-1

su agente de usuario, también conocido como navegador, envía una cabecera XHR, que se puede coger desde PHP como esto:

$_SERVER['HTTP_X_REQUESTED_WITH'] 
-1

No realmente. Excepto que la mayoría de los clientes Ajax envían un X-Requested-With=XMLHttpRequest encabezado HTTP

21

Puede haber algunas diferencias en el encabezado, pero la diferencia de comportamiento principal está en el cliente.

Cuando el navegador realiza una solicitud normal como en window.location.href = "index.html", borra la ventana actual y carga la respuesta del servidor en la ventana.

Con una petición AJAX, la ventana actual/documento no se ve afectada y código JavaScript puede examinar los resultados de la solicitud y hacer lo que quiera con esos resultados (HTML inserción dinámica en la página, analizar JSON y usarlo de la página lógica, análisis XML, etc.).

El servidor no hace nada diferente, solo se trata de cómo el cliente trata la respuesta de las dos solicitudes.

1

Aunque les creo muchachos, hay algo muy extraño en weblogic: Estoy escribiendo una aplicación usando ExtJS framework que hace llamadas AJAX.

Mientras se hace el j_security_check, siempre me dan errores al hacerlo de la manera AJAX: Weblogic dice:

unauthorized: var submitButton = new Ext.Button({ 
      text: 'Logon', 
      formBind: true, //only enabled once the form is valid 
      disabled: true, 
      handler: function() {     
       Ext.Ajax.request({ 
        url: "j_security_check", 
        params: { 
         j_username: dlg.getForm().findField('j_username').getValue(), 
         j_password: dlg.getForm().findField('j_password').getValue() 
        }, 
        method: "GET" 
       }); 
      } 
     }); 

Esta falla.

Cuando expido el presente:

window.location.href = "j_security_check?j_username=" + dlg.getForm().findField('j_username').getValue() + "&j_password=" + dlg.getForm().findField('j_password').getValue(); 

Funciona! Extraño.

Cuestiones relacionadas