Tengo que hacer una llamada de servicio web desde mis sitios web a un dominio/servidor de terceros. Mientras hago esta llamada usando el método jQuery Ajax by Post con content-type:text/plain y funciona bien.
Pero mientras lo cambio a tipo de contenido: texto/xml, arroja:
La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: no hay ningún encabezado 'Access-Control-Allow-Origin' en el recurso solicitado.
Incluso se configuró en un servidor de terceros para permitir el acceso a nuestro sitio web. Y recibimos este encabezado al hacer una llamada con content-type:text/plain.
También hemos agregado seguimiento en el servidor de terceros.
Access-Control-Allow-Methods : Get , Post , Options ,PUT Access-Control-Allow-Headers: Authorization,origin, content-type, acceptPor favor, hágame saber cuál podría ser la razón por la que la solicitud previa al vuelo no recibe la respuesta 'Access-Control-Allow-Origin'.
La razón por la que su secuencia de comandos funciona para texto/simple es porque es una solicitud simple. Si observa esta respuesta , puede ver que su solicitud de texto/sin formato cumple con los requisitos para una solicitud simple. Sin embargo, cuando cambia el tipo de contenido a texto/xml, lo cambia a una solicitud "no simple".
Para que su solicitud "no simple" funcione, deberá ver cómo hacer una solicitud previa al vuelo. Este sitio web explica cómo puede hacerlo en "Gestionar una solicitud no tan simple".
Solo una nota: Access-Control-Allow-Methods es sensible a la conversión (todo en mayúsculas), y no necesita enumerar ningún método utilizado para una solicitud simple (GET, HEAD, POST). - fuente
Access-Control-Allow-Methods: OPTIONS, PUT Access-Control-Allow-Headers: Authorization, Origin, Content-Type, AcceptFirefox no incluye un encabezado de origen en las solicitudes del mismo origen. Pero Chrome y Safari incluyen un encabezado de origen en las solicitudes POST/PUT/DELETE del mismo origen (las solicitudes GET del mismo origen no tendrán un encabezado de origen).
¿Existe la posibilidad de que el origen sea el mismo?
¿Podría haber un problema con su almacenamiento en caché ?
Asegúrese de tener estas configuraciones para su llamada jquery ajax:
crossDomain: true // Will force a cross domain request cache: falseLa diferencia entre content-type:text/plain y content-type: text/xml es: "text/xml" requiere "preflight" pero "text/plain" no.
Desde MDN :
En particular, una solicitud se verifica previamente si:
Utiliza métodos distintos a GET, HEAD o POST. Además, si POST se utiliza para enviar datos de solicitud con un tipo de contenido que no sea application/x-www-form-urlencoded, multipart/form-data o text/plain, por ejemplo, si la solicitud POST envía una carga útil XML al servidor usando application/xml o text/xml, entonces la solicitud se verifica previamente.
Algunas razones potenciales que pueden causar la falla de una solicitud de verificación previa:
Access-Control-Allow-Credentials: true header también. Nuevamente desde MDN .