jquery apache ruby-on-rails-3 xmlhttprequest http-method

jquery - XHR no funciona porque "Origen no está permitido por Access-Control-Allow-Origin"



apache ruby-on-rails-3 (3)

Eso suena como un problema diferente.

Estás haciendo lo correcto con respecto a los encabezados de CORS. Otra cosa en tu configuración de Apache es denegar al cliente. A Apache no le importa para nada la política de origen, por lo que su error de "cliente denegado por la configuración del servidor" se debe a una directiva de Access incorrecta o algo similar.

Como se sugiere, asegúrese de que puede curl -X OPTIONS http://sample.domain/uri/id primero.

Estoy trabajando en un Servidor API con Rails 3, que es bastante útil hasta ahora, pero estoy corriendo por un error todo el tiempo y no estoy seguro de si es por mi configuración de Apache o la aplicación Rails.

Cuando trato de hacer una solicitud HTTP DELETE o PUT en http: //sample.domain/uri/id a través de XHR, curl o HTTP-Client.app Rails o Apache responde con 404 o 403 (depende del cliente. Creo que porque de cors) y la consola de desarrollador de Safari responde con

XMLHttpRequest cannot load http://sample.domain/uri/id. Origin http://web.client/ is not allowed by Access-Control-Allow-Origin.

Estoy usando mod_rack aka mod_rails en un Apache2 y mi vhost realmente contiene esto:

Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods POST,GET,DELETE,PUT,OPTIONS Header set Access-Control-Allow-Headers X-Requested-With

Apache error_log responde con el siguiente error:

[Sat Oct 30 01:37:34 2010] [error] [client 22.222.222.22] client denied by server configuration: /path/to/rails/folder/public, referer: http://web.client/

Rails development.log responde con

Started OPTIONS "/uri/id" for 84.190.123.140 at 2010-10-30 03:18:42 +0200 ActionController::RoutingError (No route matches "/uri/id"):

Y aquí no estoy seguro de por qué la llamada a OPTIONS viene a través porque pensé que esto solo sería la verificación previa y seguro que no hay una ruta para OPTIONS porque quiero responder a DELETE

Si tienes alguna idea sobre cómo solucionar este problema, por favor, compártelo conmigo.

Muchas gracias David


Debe responder al método OPTIONS. Se envía antes del método DELETE real para determinar si se permite el envío de un comando DELETE, conocido como verificación previa . Puede controlar cuánto tiempo son válidos los permisos con un encabezado Access-Control-Max-Age .

En su respuesta a OPTIONS es donde envía el Access-Control-Allow-Origin, etc.

Imagina si ese no fuera el caso. Enviaría ACAO después de que ya haya eliminado el objeto. Que puede o no haber sido permitido.

Para el servidor de origen, a menudo es mejor crear una lista blanca real de servidores que pueden publicar / eliminar, o recuperar el nombre de dominio del servidor solicitante. Un "*" esencialmente deshabilita CORS y abre al usuario a todo tipo de ataques.


En los sistemas * nix, primero debe incluir / habilitar el módulo "Encabezados" en apache

sudo a2enmod encabezados

luego, debes incluir en tu vhost la siguiente línea:

Conjunto de encabezado Access-Control-Allow-Origin: "*"