¿Cómo enviar un encabezado personalizado en un cross-domain (CORS) XMLHttpRequest?

Estoy intentando enviar un CORS solicitud de un JSON de carga. Puedo controlar el servidor y 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 debe ser enviado junto con cada solicitud. Este encabezado personalizado, por lo tanto hace que la petición «no es sencillo» y por lo tanto la solicitud debe ser preflighted con una solicitud de OPCIONES.

Puedo ver jquery hacer la solicitud de OPCIONES, pero no enviar el encabezado personalizado a lo largo de.

Métodos que yo he probado:

En ambos casos, el navegador no envía el encabezado personalizado a lo largo de.

Estoy usando FF 17.0.1, jquery 1.8.3.

  • Mostrar el código en la que usted está tratando de crear el encabezado.
  • La opción headers: { Header-name: value } opción no funciona?
  • ¿Cuál es el nombre de la cabecera thats causando problemas? Estoy de acuerdo con Barmar, mostrando toda su código JS y la petición/respuesta puede ayudar a depurar este.
  • ‘tomé la libertad de actualizar el título para reflejar con más precisión el tema que usted está preguntando acerca de. espero que bien. 🙂
InformationsquelleAutor mooreds | 2012-12-21

1 Kommentar

  1. 32

    Su problema no es con jquery, es en cómo CORS obras. Su beforeSend de devolución de llamada probablemente estaba funcionando como se esperaba… pero los navegadores no enviar los encabezados personalizados en comprobaciones de solicitudes, no importa qué. Esto es así por diseño; el propósito de la comprobación previa petición de determinar qué tipo de información del agente de usuario (navegador) está permitido enviar más allá de la «simple» material definido en el CORS spec. Por lo tanto, para el useragent para enviar cualquier incumplimiento de datos simples (tales como su encabezado personalizado) como parte de la comprobación previa petición de auto-derrota.

    Para indicar el useragent de incluir su encabezado personalizado en el real CORS solicitud, incluya una Access-Control-Allow-Encabezados encabezado en su comprobaciones de respuesta. Vale la pena señalar que si usted no está demasiado preocupado con lo que los encabezados de la useragent transmite, creo que usted puede simplemente echo el valor de la Access-Control-Request-Headers el encabezado de la solicitud de campo como el valor de la Access-Control-Allow-Headers de enviar la respuesta.

    Puede que también desee incluir algunos de los otros Access-Control-Allow-* encabezados definido en el la sintaxis de la sección de la especificación.

    Ver también CORS – ¿Cómo ‘de comprobaciones’ un objeto httprequest?

    Ver también Mozilla CORS de comprobaciones ejemplo, que muestra estos encabezados en acción.

    • Gracias. Tengo cosas de trabajo después de las comprobaciones de respuesta que sucede, es sólo la llamada de OPCIONES que es el problema. Parece que voy a tener que usar un servidor de base de solución.
    • Se puede proporcionar una instantánea de los encabezados de ser enviado/recibido en la comprobación previa solicitud? Es el problema de que el servidor está rechazando la solicitud de OPCIONES porque no tienen la costumbre de cabecera? ‘Supongo que no entiendo por qué se necesita el servidor de solución todavía si las cosas están funcionando después de las comprobaciones de respuesta.
    • sí, las OPCIONES de solicitud es rechazada porque no tienen la costumbre de encabezado. En chrome, el resto de los datos se envía (que puede haber sido debido a que estoy desarrollando en localhost, no estoy seguro), pero para Firefox, una vez que las OPCIONES de error de solicitud, el resto de la solicitud falla.
    • La solución que he sido capaz de llegar hasta el momento es desactivar el encabezado personalizado de verificación de las OPCIONES de las solicitudes. Obviamente que no funcionará si usted no tiene el control de el servidor, así que me encantaría escuchar cualquier sugerencia. (Esta era una respuesta, pero fue eliminado)
    • ¿Alguna vez encontrar una solución que no requiere de (re)configurar el servidor (es decir, si usted no tiene acceso a ella)?
    • nope, yo tenía que hacer el cambio de lado de servidor. No estoy seguro si CORS ha cambiado en los últimos años, sin embargo.
    • De hecho, usted no sólo tiene que asegurarse de que su solicitud de OPCIONES contiene el requisito de acceso de control de cabeceras, pero usted TAMBIÉN necesita asegurarse de que su servidor está configurado para manejarlos adecuadamente, y devolver una respuesta que indica al navegador que las opciones suministradas son válidos para esta transacción AJAX. Alguien en Facebook y YouTube se olvidó de todo esto, hoy, y sus sitios de estrellarse y arder en mi laptop con masas de CORS de la violación de los errores en la consola (suspiro) ..l.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea