2012-09-27 13 views
46

Estoy tratando de hacer que CORS solicite POST desde domain.com a a.domain.com.¿Cómo funcionan CORS y Access-Control-Allow-Headers?

Mi JavaScript parece a esto

$('#fileupload').fileupload({ 
    xhrFields: { 
    withCredentials: true 
    }, 
    dataType: 'json', 
    url: $('#fileupload').data('path'), 
    singleFileUploads: true, 
    add: function(e, data){ 
    data.submit(); 
    } 
}); 

Al principio veo la ruta opciones que se llama así:

Request URL: https://a.domain.com/some/route 
Request Method:OPTIONS 
Status Code:200 OK 

OPCIONES DE SOLICITUD:

Access-Control-Request-Headers:origin, content-type, accept 
Access-Control-Request-Method:POST 
Host:a.domain.com 
Origin:http://domain.com:3000 
Referer:http://domain.com:3000/home 

OPCIONES DE RESPUESTA

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Methods:POST 
Access-Control-Allow-Origin:http://domain.com:3000 
Connection:keep-alive 
Content-Length:0 
Content-Type:text/html;charset=utf-8 

Esa solicitud se devuelve con un 200 como se indica. En mi servidor, tengo la misma ruta con POST método y esto es lo que recibo a cambio después de la OPTIONS

Request URL:https://a.domain.com/some/route 

solicitud POST

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjwr5Pk7WBcfzMdbO 
Origin:http://domain.com:3000 
Referer:http://domain.com:3000/home 

y la solicitud POST se cancela/falla.

Mi pregunta es, ¿necesito tener el control de acceso-permitir-origen en el controlador POST también?

Tengo una cookie para autorización que tiene el dominio .domain.com que se envió la cookie una vez en una solicitud y no se está enviando ahora. ¿Alguna idea de por qué sucedería eso?

Respuesta

65

Sí, debe tener el encabezado Access-Control-Allow-Origin: http://domain.com:3000 o Access-Control-Allow-Origin: * tanto en la respuesta OPCIONES como en la respuesta POST. También debe incluir el encabezado Access-Control-Allow-Credentials: true en la respuesta POST.

La respuesta de OPCIONES también debe incluir el encabezado Access-Control-Allow-Headers: origin, content-type, accept para que coincida con el encabezado solicitado.

+1

se puede omitir el protocolo? o puede agregar uno con http y https? – Michael

-13

Si está usando PHP para añadir las siguientes líneas

header (" Access -Control- Allow-Origin : *") ; 
header (" Access- Control-Allow -Headers : *") ; 

Probablemente resolver su problema

+12

'Access-Control-Allow -Headers' no acepta comodines. Por favor prueba tus respuestas antes de publicarlas. – TRiNE

+1

'Access-Control-Allow-Origin' tampoco acepta comodines para solicitudes con credenciales. – Quentin

Cuestiones relacionadas