Encabezados de solicitud de control de acceso, se agrega al encabezado en la solicitud AJAX con jQuery
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?
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));
}
});
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);
}
});
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.