headers - jQuery CORS OPCIONES DE TIPO DE CONTENIDO
falta la cabecera cors ''access-control-allow-origin'' jquery (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í:
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