jQuery CORS OPCIONES DE TIPO DE CONTENIDO

Tengo problemas para enviar una solicitud de cuerpo AJAX utilizando jQuery CORS con tipo de contenido personalizado. Aquí está mi código:

$.ajax({ url: "http://some-other-domain/my-path", type: "POST", contentType: "application/json", dataType: "json", data: JSON.stringify({ key: 1, key2: 2 }), statusCode: { 200: function(data) { } }, xhrFields: { withCredentials: true }, crossDomain: true }); 

Necesito configurar el tipo de contenido como “aplicación / json”, ya que requiere del lado del servidor. Pero en lugar de enviar la solicitud como POST, jQuery lo envía como OPCIONES.

Aquí hay un encabezado:

Encabezados de respuesta:

 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 03:00:00 EET Set-Cookie: JSESSIONID=BB9D6783E58FB0F2ADE1924A2F0CBA52; Path=/ Content-Type: text/html;charset=UTF-8 Content-Length: 6233 Date: Fri, 07 Sep 2012 14:41:13 GMT 

Encabezados de solicitud:

 OPTIONS /my-path HTTP/1.1 Host: MY-HOME-NAME User-Agent: MY_USER_AGEMT Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Origin: HERE-GOES-DOMAIN Access-Control-Request-Method: POST Access-Control-Request-Headers: content-type Pragma: no-cache Cache-Control: no-cache 

CORS funciona muy bien, todos los encabezados requeridos son enviados por el servidor, pero no si se envía por tipo de OPCIONES. ¿Es un problema de jQuery?

jQuery – 1.8.1

Esta solicitud de OPCIONES es la solicitud de verificación previa de CORS. Es una solicitud que se envía al servidor antes de la solicitud real para solicitar permisos para realizar la solicitud. El tipo de contenido personalizado de hecho está activando la verificación previa. De acuerdo con la especificación CORS ( http://www.w3.org/TR/cors/ ), cualquier tipo de contenido que no sea ​​application / x-www-form-urlencoded, multipart / form-data o text / plain desencadena la Preflight.

Si no tiene control sobre el servidor remoto, deberá pedirles que respalden la verificación previa de CORS o probar con alguna otra opción, como JSON-P.

Si tiene control sobre el servidor remoto, puede cambiarlo para controlar las previsualizaciones. Para gestionar una solicitud de verificación previa, debe enviar los siguientes encabezados en la respuesta a la solicitud OPCIONES:

 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST Access-Control-Allow-Headers: Content-Type 

La respuesta debe ser un HTTP 200. El encabezado de respuesta Access-Control-Allow-Methods puede hacer eco del valor de Access-Control-Request-Method , o simplemente puede ser GET, POST, PUT, DELETE para admitir todos los métodos. El Access-Control-Allow-Headers respuesta de Access-Control-Allow-Headers debe hacer eco de los valores en el Access-Control-Request-Headers solicitud de Access-Control-Request-Headers .

Una vez que el navegador recibe esos encabezados, hará la solicitud real. Puede obtener más información sobre las solicitudes de verificación previa de CORS aquí:

http://www.html5rocks.com/en/tutorials/cors/