La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso

500
Andre Mendes 2016-02-24 11:37.

Recibo este error al usar ngResource para llamar a una API REST en Amazon Web Services:

XMLHttpRequest no puede cargar http://server.apiurl.com:8000/s/login?login=facebook . La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: no hay un encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Por lo tanto, no se permite el acceso al origen ' http: // localhost '. Error 405

Servicio:

socialMarkt.factory('loginService', ['$resource', function($resource){    
    var apiAddress = "http://server.apiurl.com:8000/s/login/";
    return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
                getUser: {method:'POST'}
            });
}]);

Controlador:

[...]
loginService.getUser(JSON.stringify(fbObj)),
                function(data){
                    console.log(data);
                },
                function(result) {
                    console.error('Error', result.status);
                }
[...]

Estoy usando Chrome y no sé qué más hacer para solucionar este problema. Incluso he configurado el servidor para que acepte encabezados desde el origen localhost.

19 answers

258
E. Maggini 2016-02-24 11:45.

Te encuentras con problemas de CORS.

Hay varias formas de solucionar este problema.

  1. Apague CORS. Por ejemplo: cómo apagar cors en chrome
  2. Utilice un complemento para su navegador
  3. Utilice un proxy como nginx. ejemplo de cómo configurar
  4. Realice la configuración necesaria para su servidor. Este es más un factor del servidor web que ha cargado en su instancia EC2 (suponiendo que esto es lo que quiere decir con "servicio web de Amazon"). Para su servidor específico, puede consultar el sitio web enable CORS.

Más detalladamente, está intentando acceder a api.serverurl.com desde localhost. Esta es la definición exacta de solicitud entre dominios.

Al apagarlo solo para hacer su trabajo (OK, ponga poca seguridad para usted si visita otros sitios y simplemente patea la lata en el camino) puede usar un proxy que hace que su navegador piense que todas las solicitudes provienen del host local cuando realmente tienes un servidor local que luego llama al servidor remoto.

por lo que api.serverurl.com podría convertirse en localhost: 8000 / api y su nginx local u otro proxy enviará al destino correcto.


Ahora, por demanda popular, 100% más de información CORS ... ¡mismo gran sabor!


Y para los votantes negativos ... omitir CORS es exactamente lo que se muestra para aquellos que simplemente están aprendiendo la interfaz. https://codecraft.tv/courses/angular/http/http-with-promises/

178
Slipstream 2016-04-06 23:08.

Mi "servidor API" es una aplicación PHP, por lo que para resolver este problema encontré que la siguiente solución funciona:

Coloque las líneas en index.php

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
49
Rajkumar Peter 2017-05-06 05:49.

En la api web de AspNetCore, este problema se solucionó agregando "Microsoft.AspNetCore.Cors" (ver 1.1.1) y agregando los siguientes cambios en Startup.cs.

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddCors(options =>
    {
          options.AddPolicy("AllowAllHeaders",
                builder =>
            {
                    builder.AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
    });
    .
    .
    .
}

y

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{


    // Shows UseCors with named policy.
    app.UseCors("AllowAllHeaders");
    .
    .
    .
}

y poner [EnableCors("AllowAllHeaders")]el controlador.

36
Sasa Blagojevic 2018-10-23 09:45.

Hay algunas advertencias cuando se trata de CORS. Primero, no permite comodines, *pero no me detenga en este. Lo he leído en alguna parte y ahora no puedo encontrar el artículo.

Si realiza solicitudes desde un dominio diferente, debe agregar los encabezados de origen de permiso.

 Access-Control-Allow-Origin: www.other.com 

Si va a realizar peticiones que afectan a los recursos del servidor como de POST / PUT / PATCH, y si el tipo MIME es diferente del siguiente application/x-www-form-urlencoded, multipart/form-datao text/plainel navegador automáticamente hará una OPCIONES prevuelos solicitan comprobar con el servidor si lo permitiría .

Por lo tanto, su API / servidor debe manejar estas solicitudes de OPCIONES en consecuencia, debe responder con el access control headerscódigo de estado de respuesta http apropiado y debe ser 200.

Los encabezados deberían ser algo como esto, ajústelos según sus necesidades:

   Access-Control-Allow-Methods: GET, POST, PUT, PATCH, POST, DELETE, OPTIONS
   Access-Control-Allow-Headers: Content-Type
   Access-Control-Max-Age: 86400

El encabezado de edad máxima es importante, en mi caso, no funcionaría sin él, supongo que el navegador necesita la información de cuánto tiempo son válidos los "derechos de acceso".

Además, si está haciendo, por ejemplo, una POSTsolicitud con application/jsonmime de un dominio diferente, también debe agregar el encabezado de origen de permiso mencionado anteriormente, para que se vea así:

   Access-Control-Allow-Origin: www.other.com 
   Access-Control-Allow-Methods: GET, POST, PUT, PATCH, POST, DELETE, OPTIONS
   Access-Control-Allow-Headers: Content-Type
   Access-Control-Max-Age: 86400

Cuando el vuelo previo tenga éxito y obtenga toda la información necesaria, se realizará su solicitud real.

En términos generales, los Access-Controlencabezados que se soliciten en la solicitud inicial o previa al vuelo deben incluirse en la respuesta para que funcione.

Hay un buen ejemplo en los documentos de MDN aquí en este enlace , y también debería consultar esta publicación SO

15
Tadej 2017-03-30 21:06.

JavaScript XMLHttpRequest y Fetch siguen la política del mismo origen. Por lo tanto, una aplicación web que usa XMLHttpRequest o Fetch solo podría realizar solicitudes HTTP a su propio dominio.

Fuente: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Debe enviar el encabezado HTTP Access-Control-Allow-Origin: * desde el lado del servidor.

Si está utilizando Apache como su servidor HTTP, puede agregarlo a su archivo de configuración de Apache de esta manera:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Mod_headers está habilitado de forma predeterminada en Apache, sin embargo, es posible que desee asegurarse de que esté habilitado ejecutando:

 a2enmod headers
11
freedev 2017-06-21 21:59.

Si está escribiendo una extensión de Chrome

Tienes que agregar manifest.jsonlos permisos para tu (s) dominio (s).

"permissions": [
   "http://example.com/*",
   "https://example.com/*"
]
8
Sunil Kumar 2017-09-09 10:19.

Si está utilizando el servidor IIS por casualidad. puede establecer los encabezados siguientes en la opción de encabezados de solicitud HTTP.

Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: 'HEAD, GET, POST, PUT, PATCH, DELETE'
Access-Control-Allow-Headers: 'Origin, Content-Type, X-Auth-Token';

con esta publicación, obtener, etc., funcionará bien.

7
Rohit Parte 2018-10-13 05:06.

Para solucionar problemas de solicitudes de origen cruzado en una aplicación Node JS:

npm i cors

Y simplemente agregue las líneas de abajo al app.js

let cors = require('cors')
app.use(cors())
6
atiruz 2017-12-22 04:33.

En PHP puede agregar los encabezados:

<?php
header ("Access-Control-Allow-Origin: *");
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
header ("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
header ("Access-Control-Allow-Headers: *");
...
5
Teriblus 2016-08-26 02:19.

Para el servidor de matraces de Python, puede usar el complemento flask-cors para habilitar solicitudes entre dominios.

Ver: https://flask-cors.readthedocs.io/en/latest/

4
w00ngy 2018-12-21 10:33.

Nuestro equipo ve esto ocasionalmente usando Vue, axios y C # WebApi. Agregar un atributo de ruta en el punto final al que intentas acceder lo soluciona.

[Route("ControllerName/Endpoint")]
[HttpOptions, HttpPost]
public IHttpActionResult Endpoint() { }
3
hugsbrugs 2017-01-12 02:00.

En mi archivo de configuración de Apache VirtualHost, he agregado las siguientes líneas:

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
3
Xu Chen 2017-12-08 14:43.

Para aquellos que utilizan Lambda Integrated Proxy con API Gateway . Necesita configurar su función lambda como si le estuviera enviando sus solicitudes directamente, lo que significa que la función debería configurar los encabezados de respuesta correctamente. (Si está utilizando funciones lambda personalizadas, esto será manejado por API Gateway).

//In your lambda's index.handler():
exports.handler = (event, context, callback) => {
     //on success:
     callback(null, {
           statusCode: 200,
           headers: {
                "Access-Control-Allow-Origin" : "*"
           }
     }
}
3
Shubham Pandey 2018-04-19 01:59.

Creo que deshabilitar CORS desde Chrome no es una buena manera , porque si lo está usando en iónico, ciertamente en Mobile Build el problema volverá a surgir.

Así que es mejor arreglarlo en tu backend.

En primer lugar, en el encabezado, debe configurar

  • encabezado ('Access-Control-Allow-Origin: *');
  • header ('Conjunto de encabezados Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"');

Y si la API se comporta como GET y POST, entonces también Set en su encabezado-

if ($ _SERVER ['REQUEST_METHOD'] == 'OPTIONS') {if (isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) encabezado ("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) encabezado ("Access-Control-Allow-Headers:
{$ _SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); salir (0); }

2
Christian Nwafor 2018-09-30 02:40.

Una causa muy común de este error podría ser que la API del host asignó la solicitud a un método http (por ejemplo, PUT) y el cliente de la API está llamando a la API utilizando un método http diferente (por ejemplo, POST o GET)

1
Kirill Gusyatin 2016-12-16 03:13.

Me enfrenté a este problema cuando el servidor DNS estaba configurado en 8.8.8.8 (de Google). En realidad, el problema estaba en el enrutador, mi aplicación intentó conectarse con el servidor a través de Google, no localmente (para mi caso particular). Eliminé 8.8.8.8 y esto resolvió el problema. Sé que estos problemas se resuelven con la configuración de CORS, pero tal vez alguien tenga el mismo problema que yo

1
davyCode 2018-09-08 01:18.

Estoy usando AWS sdk para cargas, después de pasar algún tiempo buscando en línea, me encontré con este hilo. gracias a @lsimoneau 45581857 resulta que estaba sucediendo exactamente lo mismo. Simplemente apunté mi URL de solicitud a la región en mi depósito adjuntando la opción de región y funcionó.

 const s3 = new AWS.S3({
 accessKeyId: config.awsAccessKeyID,
 secretAccessKey: config.awsSecretAccessKey,
 region: 'eu-west-2'  // add region here });
0
Yassine Ech-Charafi 2018-01-05 05:07.

Las distribuciones independientes de GeoServer incluyen el servidor de aplicaciones Jetty. Habilite el uso compartido de recursos de origen cruzado (CORS) para permitir que las aplicaciones JavaScript fuera de su propio dominio utilicen GeoServer.

Descomente lo siguiente <filter>y <filter-mapping>de webapps / geoserver / WEB-INF / web.xml:

<web-app>
  <filter>
      <filter-name>cross-origin</filter-name>
      <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>cross-origin</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
0
Rahul sah 2019-11-11 09:16.

Es fácil resolver este problema con solo unos pocos pasos, sin preocuparse por nada. Amablemente, siga los pasos para resolverlo.

  1. abierto ( https://www.npmjs.com/package/cors#enabling-cors-pre-flight )
  2. vaya a la instalación y copie el comando npm install cors para instalar a través de la terminal de nodo
  3. vaya a Uso simple (Habilitar todas las solicitudes CORS) desplazándose. Luego copie y pegue la declaración completa en su proyecto y ejecútelo ... eso funcionará con seguridad ... Copie el código de comentario y péguelo en su app.js o cualquier otro proyecto y pruébalo ... esto funcionará.Esto desbloqueará todos los recursos compartidos de origen cruzado ... para que podamos cambiar entre servicios para su uso

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.

La mejor forma de guardar animales de peluche es dentro de un puf

La mejor forma de guardar animales de peluche es dentro de un puf

Entiendo totalmente, completamente si tienes una relación difícil con los animales de peluche. Son lindos, tienen valor sentimental y es difícil separarse de ellos.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language