¿Cómo se envía un encabezado personalizado en un dominio cruzado (CORS) XMLHttpRequest?

Estoy intentando enviar una solicitud CORS para una carga útil JSON. Yo controlo tanto el servidor como el cliente.

Estoy siguiendo aquí: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control

El servidor tiene un encabezado personalizado que se debe enviar junto con cada solicitud. Por lo tanto, este encabezado personalizado hace que la solicitud “no sea simple” y, por lo tanto, la solicitud debe estar precedida de una solicitud de OPCIONES.

Puedo ver que jquery hace la solicitud OPTIONS, pero no envía el encabezado personalizado.

Métodos que he probado:

  • utilizando la opción beforeSend: http://api.jquery.com/jQuery.ajax/
  • utilizando un prefiltro ajax: http://api.jquery.com/jQuery.ajaxPrefilter/

En ambos casos, el navegador no está enviando el encabezado personalizado.

Estoy usando FF 17.0.1, jquery 1.8.3.

Tu problema no está en jquery, sino en cómo funciona CORS . Su callback beforeSend probablemente funcionaba como se esperaba … pero los navegadores no enviarán encabezados personalizados en las solicitudes de verificación previa, sin importar qué. Esto es por diseño; El propósito de la solicitud de verificación previa es determinar qué información se permite que useragent (navegador) envíe más allá de las cosas “simples” definidas en la especificación CORS. Por lo tanto, para que useragent envíe datos no simples (como su encabezado personalizado) como parte de la solicitud de verificación previa es contraproducente.

Para indicar al agente de utilización que incluya su encabezado personalizado en la solicitud CORS real, incluya un Access-Control-Allow-Headers en su respuesta de verificación previa. Vale la pena señalar que si no está demasiado preocupado con los encabezados que transmite el usuario, creo que puede repetir el valor del campo de encabezado de solicitud de Access-Control-Request-Headers como el valor de Access-Control-Allow-Headers que envía en la respuesta.

Es posible que también desee incluir algunos de los demás encabezados Access-Control-Allow-* definidos en la sección de syntax de la especificación .

Ver también CORS – ¿Cómo ‘prevuelo’ una httprequest?

Consulte también el ejemplo de comprobación previa CORS de Mozilla , que muestra estos encabezados en acción.