¿Alguien sabe cómo agregar o crear un encabezado HTTP personalizado usando JavaScript o jQuery?
¿Alguien sabe cómo agregar o crear un encabezado HTTP personalizado usando JavaScript o jQuery?
Existen varias soluciones según lo que necesite ...
Si desea agregar un encabezado personalizado (o un conjunto de encabezados) a una solicitud individual , simplemente agregue la headers
propiedad:
// Request with custom header
$.ajax({
url: 'foo/bar',
headers: { 'x-my-custom-header': 'some value' }
});
Si desea agregar un encabezado predeterminado (o un conjunto de encabezados) a cada solicitud , utilice $.ajaxSetup()
:
$.ajaxSetup({
headers: { 'x-my-custom-header': 'some value' }
});
// Sends your custom header
$.ajax({ url: 'foo/bar' });
// Overwrites the default header with a new header
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });
Si desea agregar un encabezado (o conjunto de encabezados) a cada solicitud , use el beforeSend
enlace con $.ajaxSetup()
:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('x-my-custom-header', 'some value');
}
});
// Sends your custom header
$.ajax({ url: 'foo/bar' });
// Sends both custom headers
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });
Editar (más información): Una cosa a tener en cuenta es que con ajaxSetup
usted solo puede definir un conjunto de encabezados predeterminados y solo puede definir uno beforeSend
. Si llama ajaxSetup
varias veces, solo se enviará el último conjunto de encabezados y solo se ejecutará la última devolución de llamada anterior al envío.
O, si desea enviar el encabezado personalizado para cada solicitud futura, puede utilizar lo siguiente:
$.ajaxSetup({
headers: { "CustomHeader": "myValue" }
});
De esta forma, cada solicitud ajax futura contendrá el encabezado personalizado, a menos que las opciones de la solicitud anulen explícitamente. Puedes encontrar más información ajaxSetup
aquí
Suponiendo JQuery ajax, puede agregar encabezados personalizados como -
$.ajax({
url: url,
beforeSend: function(xhr) {
xhr.setRequestHeader("custom_header", "value");
},
success: function(data) {
}
});
Aquí hay un ejemplo usando XHR2:
function xhrToSend(){
// Attempt to creat the XHR2 object
var xhr;
try{
xhr = new XMLHttpRequest();
}catch (e){
try{
xhr = new XDomainRequest();
} catch (e){
try{
xhr = new ActiveXObject('Msxml2.XMLHTTP');
}catch (e){
try{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}catch (e){
statusField('\nYour browser is not' +
' compatible with XHR2');
}
}
}
}
xhr.open('POST', 'startStopResume.aspx', true);
xhr.setRequestHeader("chunk", numberOfBLObsSent + 1);
xhr.onreadystatechange = function (e) {
if (xhr.readyState == 4 && xhr.status == 200) {
receivedChunks++;
}
};
xhr.send(chunk);
numberOfBLObsSent++;
};
Espero que ayude.
Si crea su objeto, puede usar la función setRequestHeader para asignar un nombre y un valor antes de enviar la solicitud.
$.ajax*
funciones b / c, no dependen de jQuery y en su lugar usan XHR, por lo que esta es la única opción válida en esos casos.
También puede hacer esto sin usar jQuery. Anule el método de envío de XMLHttpRequest y agregue el encabezado allí:
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
this.setRequestHeader('x-my-custom-header', 'some value');
this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;
Debe evitar el uso $.ajaxSetup()
como se describe en los documentos . Use lo siguiente en su lugar:
$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
jqXHR.setRequestHeader('my-custom-header', 'my-value');
});
Suponiendo que quiere decir "Al usar ajax" y "Un encabezado de solicitud HTTP ", use la headers
propiedad en el objeto al que pasaajax()
encabezados (agregado 1.5)
Defecto:
{}
Un mapa de pares de clave / valor de encabezado adicionales para enviar junto con la solicitud. Esta configuración se establece antes de que se llame a la función beforeSend; por lo tanto, cualquier valor en la configuración de encabezados se puede sobrescribir desde la función beforeSend.
Se debe utilizar el método "setRequestHeader" del objeto XMLHttpRequest
beforeSend
cuando hago una$.ajax
?beforeSend
devolución de llamada. Si llama$.ajaxSetup({ beforeSend: func... })
dos veces, la segunda devolución de llamada será la única que se active.ajaxSetup
.