2011-04-24 13 views
13

Estoy usando JQuery para emitir una solicitud AJAX a mi propio servicio web. Necesito establecer o modificar el HTTP-Header User-Agent para HTTP-AJAX-Request, ¿cómo puedo hacer esto de la manera más fácil?JQuery Ajax Solicitud: cambio de usuario-agente

Probé la sugerencia proporcionada por algunos usuarios para usar el método setRequestHeader para configurar el User-Agent, pero esto no funciona. De hecho, funciona para otros encabezados recién creados (como X-Test-Header) pero no funciona para User-Agent.

Gracias!

+1

vea esta discusión http://forum.jquery.com/topic/jquery-specifying-user-agent-with-ajax –

+0

Vea mi comentario a continuación, no funciona para mí. – theomega

Respuesta

26

Es simplemente imposible, no está permitido cambiar el user-agent para XMLHttpRequests. No estoy seguro de si esto es válido para Internet Explorer, pero el W3C especifique o especifiquen here: Método

El setRequestHeader()

[...]

Cuando el setRequestHeader (cabecera, valor) método se invoca, el agente de usuario debe ejecutar estos pasos: [...]

poner fin a estos pasos si cabecera es un partido entre mayúsculas y minúsculas para uno de los siguientes encabezados:

[...]

  • User-Agent
+2

actualización 2017: la especificación W3C TR que ha vinculado se ha movido a [esta especificación whatwg] (https://xhr.spec.whatwg.org/#the-setrequestheader() -method), que se refiere a [esta lista de encabezado prohibido nombres en la especificación de búsqueda] (https://fetch.spec.whatwg.org/#forbidden-header-name), que no incluye 'User-Agent'. MDN [confirma explícitamente] (https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name) que 'User-Agent' ya no está prohibido. Chrome todavía lo rechaza, así que no creo que tu consejo aún no sea válido. – mrec

9

Si está utilizando jQuery, configure el encabezado de solicitud en ajaxSetup.

$.ajaxSetup({ 
    beforeSend: function(request) { 
    request.setRequestHeader("User-Agent","InsertUserAgentStringHere"); 
    } 
}); 
+0

¿Has probado esto? No funciona con JQuery 1.5.2 y Firefox 4, el usuario-agente sigue siendo el predeterminado. Llamo a ajaxSetup después de que el documento se haya cargado por completo (document.ready) antes de emitir las llamadas. Es una simple solicitud json (no jsonp) – theomega

+0

Esto no funciona en Chrome con una Mac. Diría que, en general, esto no funciona en absoluto si es "simplemente imposible". – Chris

+6

Funciona para mí dentro de mi aplicación node.js, donde no me importan las reglas de w3c. Eres increíble, gracias. –

5

Bueno, siempre podía usar jQuery para publicar en una página del lado del servidor que luego a su vez es capaz de modificar la cabecera User-Agent , y también hacer una solicitud a la página a la que se hubiera accedido directamente mediante jQuery.

Cuestiones relacionadas