Me he encontrado con problemas de CORS varias veces y generalmente puedo solucionarlo, pero realmente quiero entender al ver esto desde un paradigma MEAN stack.
Antes simplemente agregué middleware en mi servidor express para detectar estas cosas, pero parece que hay algún tipo de preenganche que está enviando errores a mis solicitudes.
El campo de encabezado de solicitud Access-Control-Allow-Headers no está permitido por Access-Control-Allow-Headers en la respuesta previa al vuelo
Supuse que podía hacer esto:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","*")
})
o el equivalente pero esto no parece solucionarlo. También, por supuesto, intenté
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","Access-Control-Allow-Headers")
})
Aún sin suerte.
Access-Control-Request-Headers
header("Access-Control-Allow-Headers: Content-Type")
Esto es lo que necesita agregar para que funcione.
El navegador envía una solicitud de verificación previa (con el tipo de método OPTIONS) para verificar si se puede acceder al servicio alojado en el servidor desde el navegador en un dominio diferente. En respuesta a la solicitud de verificación previa si inyecta los encabezados anteriores, el navegador comprende que está bien hacer más llamadas y obtendré una respuesta válida a mi llamada GET / POST real. puede restringir el dominio al que se otorga el acceso utilizando Access-Control-Allow-Origin "," localhost, xvz.com "en lugar de *. (* otorgará acceso a todos los dominios)
fuente
*
por...-Origin
ytrue
para...-Credentials
. No fallará para las solicitudes sin credenciales, pero tampoco funcionará para las solicitudes con credenciales. Vea el enlace que publiqué en mi respuesta.response.setHeader("Access-Control-Allow-Headers", "*")
? ¿Cuál es la implicación de seguridad de hacer esto?Este problema resuelto con
Particular en mi proyecto (express.js / nodejs)
Actualizar:
Cada vez error:
Access-Control-Allow-Headers is not allowed by itself in preflight response
error, puedes ver qué está mal con la herramienta de desarrollador de Chrome :falta el error anterior,
Content-Type
así que agregue una cadenaContent-Type
aAccess-Control-Allow-Headers
fuente
La respuesta aceptada está bien, pero tuve dificultades para entenderla. Así que aquí hay un ejemplo simple para aclararlo.
En mi solicitud ajax tenía un encabezado de autorización estándar.
Este código produce el error en la pregunta. Lo que tenía que hacer en mi servidor nodejs era agregar Autorización en los encabezados permitidos:
fuente
Para agregar a las otras respuestas. Tuve el mismo problema y este es el código que utilicé en mi servidor express para permitir llamadas REST:
Lo que básicamente hace este código es interceptar todas las solicitudes y agregar los encabezados CORS, luego continuar con mis rutas normales. Cuando hay una solicitud de OPCIONES, solo responde con los encabezados CORS.
EDITAR: Estaba usando esta solución para dos servidores express nodejs separados en la misma máquina. Al final solucioné el problema con un servidor proxy simple.
fuente
Acabo de encontrarme con este problema, en el contexto de ASP.NET, asegúrese de que su Web.config se vea así:
Observe el valor de autorización para la
Access-Control-Allow-Headers
clave. Me faltaba el valor de Autorización, esta configuración resuelve mi problema.fuente
Muy bien, usé esto en un proyecto de silex
fuente
En cromo:
Para mí, este error fue provocado por un espacio final en la URL de esta llamada.
fuente
Solo para agregar que puede colocar esos encabezados también en el archivo de configuración de Webpack. Los necesitaba como en mi caso, ya que estaba ejecutando el servidor de desarrollo webpack.
fuente
res.setHeader ('Access-Control-Allow-Headers', '*');
fuente
Recibí el error que el OP declaró usando Django, React y la lib django-cors-headers. Para solucionarlo con esta pila, haga lo siguiente:
En settings.py agregue lo siguiente según la documentación oficial .
fuente
Este problema ocurre cuando hacemos un encabezado personalizado para la solicitud. Esta solicitud utiliza
HTTP OPTIONS
e incluye varios encabezados.El encabezado requerido para esta solicitud es
Access-Control-Request-Headers
, que debe ser parte del encabezado de respuesta y debe permitir la solicitud de todo el origen. A veces también se necesitaContent-Type
en el encabezado de respuesta. Entonces su encabezado de respuesta debería ser así:fuente
En la llamada Post API estamos enviando datos en el cuerpo de la solicitud. Entonces, si enviaremos datos agregando cualquier encabezado adicional a una llamada API. Luego, se realizará la primera llamada de OPTIONS API y luego se realizará la llamada posterior. Por lo tanto, primero debe manejar la llamada OPTION API.
Puede manejar el problema escribiendo un filtro y dentro de eso debe verificar la opción de llamada a la llamada API y devolver un estado 200 OK. A continuación se muestra el código de muestra:
fuente
Si está intentando agregar un encabezado personalizado en los encabezados de solicitud, debe informar al servidor que se permite que tenga lugar un encabezado específico. El lugar para hacerlo es en la clase que filtra las solicitudes. En el ejemplo que se muestra a continuación, el nombre del encabezado personalizado es "tipo":
fuente
Después de pasar casi un día, descubrí que agregar los dos códigos a continuación resolvió mi problema.
Agregue esto en Global.asax
y en la configuración web agregue el siguiente
fuente
Yo también enfrenté el mismo problema en Angular 6. Resolví el problema usando el siguiente código. Agregue el código en el archivo component.ts.
fuente
Ese mismo problema que estaba enfrentando.
Hice un cambio simple.
fuente
El mensaje es claro que "Autorización" no está permitido en la API. Establezca
Access-Control-Allow-Headers: "Content-Type, Authorization"
fuente
Agregar cors en la función get es lo que funcionó para mí
fuente