2011-12-01 25 views
7

Uso el modelo de backbone.js. Cuando guardo el modelo, envía el método HTTP OPTIONS al lado del servidor en firefox, pero envía el método HTTP POST con safari.Http Opción Método con solicitud de Javascript

Sé que no es un problema sobre backbone.js, se trata de CORS. Simplemente comprobaré si el método, GET, POST, PUT y DELETE en el lado del servidor, no haré un trabajo con el método HTTP OPTIONS.

mi URL solicitada es mi api: api.foo.com y API solicitada a: bar.com

es así, ¿cómo puedo controlar en todos los navegadores solicitar mi api.foo.com con HTTP POST no OPCIONES ? y cómo puedo compartir el contenido de api.foo.com con todas las solicitudes desde cualquier otro dominio?

Nota: Ya he cambiado las cabeceras de respuesta' s desde el lado del servidor a: Access-Control-Allow-Origen: *

Respuesta

7

La solicitud OPCIONES es en realidad el llamado preflight request of the CORS specification. Esta solicitud de verificación previa es utilizada por los navegadores web para verificar bajo qué condiciones el servidor aceptaría una solicitud del origen respectivo. Si la respuesta a la solicitud de verificación previa fue satisfactoria, el navegador enviará la solicitud real.

Para cumplir con esta especificación, necesita que su servidor reproduzca el steps of preflight request processing.

+0

Entonces, ¿cómo puedo configurar el navegador para que no compruebe en qué condiciones el servidor aceptaría una solicitud? y comprobará antes de cada solicitud posterior? Porque, quiero que cada navegador que ejecute mi javascript envíe solo el método POST a mi script del lado del servidor –

+0

@davit No puede. Las solicitudes de origen cruzado no pudieron con el [XHR original] (http://www.w3.org/TR/XMLHttpRequest/) debido a razones de seguridad ([CSRF] (https://www.owasp.org/index. php/Cross-Site_Request_Forgery)). El [XHR nivel 2] (http://www.w3.org/TR/XMLHttpRequest2/) lo hizo posible pero con el requisito de cumplir con la especificación CORS. – Gumbo

+0

@davit Y aunque se dice que GET es un [método simple] (http://www.w3.org/TR/cors/#simple-method), una [solicitud simple de origen cruzado] (http: // www) .w3.org/TR/cors/# simple-cross-origin-request) solo es posible si el * force preflight flag * es falso (es decir, no es una solicitud * XMLHttpRequestUpload *) y no hay otros campos de encabezado en la solicitud que [campos de encabezado simples] (http://www.w3.org/TR/cors/#simple-header). – Gumbo