Encabezados de solicitud de control de acceso, se agrega al encabezado en la solicitud AJAX con jQuery

Resuelto fingerup asked hace 12 años • 8 respuestas

Me gustaría agregar un encabezado personalizado a una solicitud POST AJAX de jQuery.

He probado esto:

$.ajax({
    type: 'POST',
    url: url,
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    //OR
    //beforeSend: function(xhr) { 
    //  xhr.setRequestHeader("My-First-Header", "first value"); 
    //  xhr.setRequestHeader("My-Second-Header", "second value"); 
    //}
}).done(function(data) { 
    alert(data);
});

Cuando envío esta solicitud y miro con FireBug, veo este encabezado:

OPCIONES xxxx/yyyy HTTP/1.1
Host: 127.0.0.1:6666
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Aceptar: text/html,application/xhtml+xml, application/xml;q=0.9, / ;q=0.8
Aceptar-Idioma: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Aceptar-Codificación: gzip, deflate
Conexión: mantener -alive
Origen: nulo
Método de solicitud de control de acceso: POST
Encabezados de solicitud de control de acceso: mi primer encabezado, mi segundo encabezado
Pragma: sin caché
Control de caché: sin caché

¿Por qué mis encabezados personalizados van a Access-Control-Request-Headers:

Encabezados-de-solicitud-de-control-de-acceso: mi-primer-encabezado, mi-segundo-encabezado

Esperaba valores de encabezado como este:

Mi-primer-encabezado: primer valor
Mi-segundo-encabezado: segundo valor

¿Es posible?

fingerup avatar Apr 10 '12 23:04 fingerup
Aceptado

A continuación se muestra un ejemplo de cómo configurar un encabezado de solicitud en una llamada jQuery Ajax:

$.ajax({
  type: "POST",
  beforeSend: function(request) {
    request.setRequestHeader("Authority", authorizationToken);
  },
  url: "entities",
  data: "json=" + escape(JSON.stringify(createRequestObject)),
  processData: false,
  success: function(msg) {
    $("#results").append("The result =" + StringifyPretty(msg));
  }
});
milkovsky avatar Nov 22 '2012 15:11 milkovsky

Este código a continuación funciona para mí. Siempre uso solo comillas simples y funciona bien. Le sugiero que utilice sólo comillas simples o dobles, pero no mezcladas.

$.ajax({
    url: 'YourRestEndPoint',
    headers: {
        'Authorization':'Basic xxxxxxxxxxxxx',
        'X-CSRF-TOKEN':'xxxxxxxxxxxxxxxxxxxx',
        'Content-Type':'application/json'
    },
    method: 'POST',
    dataType: 'json',
    data: YourData,
    success: function(data){
      console.log('succes: '+data);
    }
  });
G-raph avatar Nov 14 '2014 12:11 G-raph

Lo que viste en Firefox no fue la solicitud real; tenga en cuenta que el método HTTP es OPCIONES, no POST. En realidad, fue la solicitud 'previa al vuelo' que realiza el navegador para determinar si se debe permitir una solicitud AJAX entre dominios:

http://www.w3.org/TR/cors/

El encabezado Access-Control-Request-Headers en la solicitud previa al vuelo incluye la lista de encabezados en la solicitud real. Luego se espera que el servidor informe si estos encabezados son compatibles en este contexto o no, antes de que el navegador envíe la solicitud real.

karlgold avatar Sep 10 '2012 03:09 karlgold