javascript - Error ''Solicitud de permiso de campo de cabecera no permitido''-Tastypie
django backbone.js (5)
Aunque elevé la respuesta de @Manuel Bitto,
Me gustaría publicar otra respuesta que contenga un filtro completo de Cors que funcione para mí con Apache tomcat 5.x:
public class CorsFilter implements Filter {
public CorsFilter() { }
public void init(FilterConfig fConfig) throws ServletException { }
public void destroy() { }
public void doFilter(
ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS, DELETE");
httpServletResponse.addHeader("Access-Control-Allow-Headers", "Authorization");
chain.doFilter(request, response);
}
}
Sugeriría específicamente prestar atención a la adición de OPTIONS a los valores de encabezado "Access-Control-Allow-Methods".
La razón para hacer eso es que de acuerdo con la explicación proporcionada por Mozilla,
si su solicitud (digamos POST) contiene un encabezado especial, o un tipo de contenido (y este es mi caso), entonces el objeto XMLHttpRequest generará una llamada OPTIONS adicional, que debe abordar en su código.
Espero que esto ayude.
Recibo el siguiente error al utilizar ApiKeyAuthentication para mis recursos Tastypie cuando intento hacer una solicitud HTTP usando AJAX y Tastypie:
XMLHttpRequest cannot load http://domain.com/api/v1/item/?format=json&username=popo&api_key=b83d21e2f8bd4952a53d0ce12a2314c0ffa031b1. Request header field Authorization is not allowed by Access-Control-Allow-Headers.
¿Alguna idea sobre cómo resolver esto?
Aquí están los encabezados de solicitud de Chrome:
Request Headersview source
Accept:*/*
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:
origin, authorization, access-control-allow-origin, accept, access-control-allow-headers
Access-Control-Request-Method:
GET
Aquí están los encabezados de respuesta de Chrome:
Response Headersview source
Access-Control-Allow-Headers:
Origin,Content-Type,Accept,Authorization
Access-Control-Allow-Methods:
POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Length:0
Content-Type:
text/html; charset=utf-8
Date:Fri, 11 May 2012 21:38:35 GMT
Server:nginx
Como puede ver, ambos tienen encabezados para Autorización, pero la autorización no funciona.
Aquí está el middleware django que estoy usando para editar los encabezados de respuesta: https://gist.github.com/1164697
Editar: descubrí el problema. Intentaba conectarme a www.domain.com, y solo acepta domain.com
El problema era que www.domain.com se veía como diferente de domain.com. domain.com funcionó, pero cuando utilicé www.domain.com, me detectó como que hacía solicitudes desde un dominio diferente
Esto sucede debido a la misma política de origen .
Debe realizar una llamada AJAX desde el mismo dominio donde se envía la solicitud. O realice cambios en el servidor, permitiendo solicitudes desde dominios externos.
Para resolver esto, debe realizar cambios en los encabezados en http://dominio.com permitiendo que su dominio externo en los encabezados:
Access-Control-Allow-Origin: *
Leer more
La respuesta de Antyrat no está completa.
Debes especificar qué encabezados permite tu servidor; en su caso, autorización .
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Sé que esta pregunta es más antigua.
Pero hoy encontré el mismo problema de cors luego de agregar owin. Después del número de búsqueda en google y probando varias soluciones. Solucioné el problema de cors añadiendo a continuación
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
Para obtener más información, siga los enlaces a continuación. Gracias.