Estoy usando AngularJS $ http en el lado del cliente para acceder a un punto final de una aplicación ASP.NET Web API en el lado del servidor. Como el cliente está alojado en un dominio diferente al del servidor, necesito CORS. Funciona para $ http.post (url, data). Pero tan pronto como autentico al usuario y hago una solicitud a través de $ http.get (url), recibo el mensaje
El encabezado 'Access-Control-Allow-Origin' contiene varios valores 'http://127.0.0.1:9000, http://127.0.0.1:9000', pero solo se permite uno. Por lo tanto, no se permite el acceso al origen 'http://127.0.0.1:9000'.
Fiddler me muestra que, de hecho, hay dos entradas de encabezado en la solicitud de obtención después de una solicitud de opciones exitosa. ¿Qué y dónde estoy haciendo algo mal?
Actualizar
Cuando uso jQuery $ .get en lugar de $ http.get, aparece el mismo mensaje de error. Así que esto no parece ningún problema con AngularJS. Pero, ¿dónde está mal?
asp.net-web-api
cors
angularjs-http
Papa Mufflon
fuente
fuente
Respuestas:
yo añadí
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
tanto como
app.UseCors(CorsOptions.AllowAll);
en el servidor. Esto da como resultado dos entradas de encabezado. Solo usa el último y funciona.
fuente
Nos encontramos con este problema porque habíamos configurado CORS de acuerdo con las mejores prácticas (por ejemplo, http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) Y TAMBIÉN tenía un encabezado personalizado
<add name="Access-Control-Allow-Origin" value="*"/>
en web.config.Elimine la entrada web.config y todo estará bien.
Al contrario de la respuesta de @ mww, todavía tenemos
EnableCors()
en WebApiConfig.cs Y unEnableCorsAttribute
en el controlador. Cuando sacamos uno u otro, nos encontramos con otros problemas.fuente
Estoy usando Cors 5.1.0.0, después de mucho dolor de cabeza, descubrí que el problema estaba duplicado en los encabezados Access-Control-Allow-Origin y Access-Control-Allow-Header del servidor
Eliminado
config.EnableCors()
del archivo WebApiConfig.cs y simplemente establezca el[EnableCors("*","*","*")]
atributo en la clase ControllerConsulte este artículo para obtener más detalles.
fuente
Agregar para registrar WebApiConfig
O web.config
PERO NO AMBOS
fuente
En realidad, no puede establecer varios encabezados
Access-Control-Allow-Origin
(o al menos no funcionará en todos los navegadores). En su lugar, puede establecer condicionalmente una variable de entorno y luego usarla en laHeader
directiva:Entonces, en este ejemplo, el encabezado de respuesta se agregará solo si un encabezado de solicitud
Origin
coincide con RegExp:^(https?://localhost|https://[a-z]+\.my\.base\.domain)$
(básicamente significa localhost sobre HTTP o HTTPS y * .my.base.domain sobre HTTPS).Recuerde habilitar el
setenvif
módulo.Documentos:
Por cierto. El
}e
en%{ORIGIN_SUB_DOMAIN}e
que no es un error tipográfico. Es cómo se usa la variable de entorno en laHeader
directiva.fuente
Yo también tenía tanto OWIN como mi WebAPI que aparentemente necesitaban CORS habilitado por separado, lo que a su vez creó el
'Access-Control-Allow-Origin' header contains multiple values
error.Terminé eliminando TODO el código que habilitó CORS y luego agregué lo siguiente al
system.webServer
nodo de mi Web.Config:Hacer esto satisfizo los requisitos de CORS para OWIN (permitir el inicio de sesión) y para WebAPI (permitir llamadas a la API), pero creó un nuevo problema:
OPTIONS
no se pudo encontrar un método durante la verificación previa para mis llamadas a la API. La solución fue simple: solo necesitaba eliminar lo siguiente delhandlers
nodo my Web.Config:Espero que esto ayude a alguien.
fuente
Servidor Apache:
Gasto lo mismo, pero fue porque no tenía comillas (") el asterisco en mi archivo que proporcionaba acceso al servidor, por ejemplo, '.htaccess.':
También puede tener un archivo '.htaccess' en una carpeta con otro '.htaccess', por ejemplo
En su caso, en lugar de '*', el asterisco sería el
http://127.0.0.1:9000
servidor ip ( ) al que da permiso para servir datos.ASP.NET:
Verifique que no haya un duplicado 'Access-Control-Allow-Origin' en su código.
Herramientas de desarrollo:
Con Chrome puede verificar los encabezados de sus solicitudes. Presione la tecla F12 y vaya a la pestaña 'Red', ahora ejecute la solicitud AJAX y aparecerá en la lista, haga clic y dé toda la información que está allí.
fuente
Esto sucede cuando tiene la opción Cors configurada en varias ubicaciones. En mi caso lo tenía tanto a nivel de controlador como en Startup.Auth.cs / ConfigureAuth.
Tengo entendido que si lo desea para toda la aplicación, configúrelo en Startup.Auth.cs / ConfigureAuth de esta manera ... Necesitará una referencia a Microsoft.Owin.Cors
Si prefiere mantenerlo en el nivel del controlador, puede insertarlo en el nivel del controlador.
fuente
si está en IIS, necesita activar CORS en web.config, entonces no necesita habilitarlo en App_Start / WebApiConfig.cs método de registro
Mi solución fue, comentaron las líneas aquí:
y escriba en web.config:
fuente
Esto también puede suceder, por supuesto, si realmente ha configurado su
Access-Control-Allow-Origin
encabezado para que tenga varios valores, por ejemplo, una lista de valores separados por comas, que es compatible con el RFC, pero en realidad no es compatible con la mayoría de los navegadores principales. Tenga en cuenta que el RFC habla sobre cómo permitir más de un dominio sin usar '*' también.Por ejemplo, puede obtener ese error en Chrome usando un encabezado como este:
Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com
Esto fue en
Chrome Version 64.0.3282.186 (Official Build) (64-bit)
Tenga en cuenta que si está considerando esto debido a una CDN y usa Akamai, es posible que desee tener en cuenta que Akamai no almacenará en caché en el servidor si lo usa
Vary:Origin
, como muchos sugieren para resolver este problema.Probablemente tendrá que cambiar la forma en que se construye su clave de caché, utilizando un comportamiento de respuesta de "Modificación de ID de caché". Más detalles sobre este problema en esta pregunta relacionada de StackOverflow
fuente
Access-Control-Allow-Origin: http://test.mysite.com http://test2.mysite.com
. Esa sería la forma correcta, pero los navegadores no siguen el estándar aquí ( fuente ).Tan estúpido y simple:
Este problema me ocurrió cuando tenía dos tiempos
Header always set Access-Control-Allow-Origin *
dentro de mi archivo de configuración de Apache. Una vez dentro de lasVirtualHost
etiquetas y una vez dentro de unaLimit
etiqueta:Eliminar una entrada resolvió el problema.
Supongo que en la publicación original habría sido dos veces:
fuente
Acabo de tener este problema con un servidor nodejs.
así es como lo arreglé.
Ejecuté mi servidor de nodo a través de
nginx proxy
ay configuré nginx ynode
a ambosallow cross domain requests
y no me gustó, así que lo eliminé de nginx y lo dejé en el nodo y todo estuvo bien.fuente
rack-cors
gema maneje las cosas de CORS. Bam, arreglado.Me he enfrentado al mismo problema y esto es lo que hice para resolverlo:
En el servicio WebApi, dentro de Global.asax he escrito el siguiente código:
Aquí este código solo permite la solicitud previa al vuelo y el token para agregar "Access-Control-Allow-Origin" en la respuesta; de lo contrario, no lo agregaré.
Aquí está mi blog sobre la implementación: https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /
fuente
para aquellos que están usando IIS con php, en el lado del servidor de IIS, actualice el archivo web.config, el directorio raíz (wwwroot) y agregue esto
después de eso, reinicie el servidor IIS, escriba IISReset en RUN e ingrese
fuente
Aquí hay otra instancia similar a los ejemplos anteriores en la que solo puede tener un archivo de configuración que defina dónde está CORS: había dos archivos web.config en el servidor IIS en la ruta en diferentes directorios, y uno de ellos estaba oculto en el directorio virtual. Para resolverlo, eliminé el archivo de configuración de nivel raíz ya que la ruta usaba el archivo de configuración en el directorio virtual. Tienes que elegir uno u otro.
fuente
El encabezado 'Access-Control-Allow-Origin' contiene varios valores
Cuando recibí este error, pasé toneladas de horas buscando una solución para esto, pero nada funciona, finalmente encontré una solución a este problema que es muy simple. cuando el encabezado '' Access-Control-Allow-Origin 'se agrega más de una vez a su respuesta, se produce este error, verifique su apache.conf o httpd.conf (servidor Apache), el script del lado del servidor y elimine el encabezado de entrada no deseado de estos archivos .
fuente