¿Qué puede evitar anular Access-Control-Allow-Origin en el servidor?

3 minutos de lectura

avatar de usuario
jaakko karhu

Tengo un sitio WP con API y lo llamo con otro sitio. me sale este error

El acceso a XMLHttpRequest en www.wpsiteurl.com desde el origen www.theothersiteurl.com ha sido bloqueado por la política de CORS: la respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: el encabezado ‘Access-Control-Allow-Origin’ contiene varios valores ‘ www.theothersiteurl.com, *’, pero solo se permite uno.

encontré soluciones aquí y aquíque básicamente introduce agregar esto a la función de registro:

remove_filter( 'rest_pre_serve_request', 'rest_send_cors_headers' );
add_action( 'rest_pre_serve_request', function ($value) {
    $origin = get_http_origin();
    header( 'Access-Control-Allow-Headers: X-Requested-With' );
    header( 'Access-Control-Allow-Methods: POST, GET' );
    header( 'Access-Control-Allow-Origin: *');
    header( 'Access-Control-Allow-Credentials: true');
    return $value;
});

Para mi esto no funciona, ya que solo devuelve * o lo que sea que se agregue como origen y otro *. Cambiar el segundo argumento no ayuda, parece que se agregó un comodín a los orígenes después de agregar esta acción.

Edité el archivo .htaccess como se indicó en las respuestas. Esto funcionó en otro entorno, donde estaba probando la solución. Sin embargo, en otro servidor no fue así: el origen se agregó a la cadena de orígenes como si se hubiera agregado con el archivo php.

Para mí, parece que hay algo que impide anular por completo el control de acceso-permitir-origen y obliga a agregarlo.

Mis preguntas son:

  • ¿Qué puede causar que el servidor no permita configurar un Access-Control-Allow-Origin?
  • ¿Cómo “anulo” o borro el Access-Control-Allow-Origin?

  • stackoverflow.com/questions/1653308/… puedes probar este enlace.

    – Chilll007

    14 de enero de 2019 a las 7:39

  • Puede ser que esto podría ayudar => crunchify.com/…

    – Aabir Hussein

    17 de enero de 2019 a las 10:12

  • ¿Hay un CDN o un servidor proxy entre usted y el origen? Además, ¿está bloqueando OPCIONES? Lo necesita junto con GET.

    – adamrights

    19 de enero de 2019 a las 22:29

  • @adamrights ¿Bloqueando OPCIONES? ¿Puedes explicar un poco más?

    – Jaakko Karhu

    21 de enero de 2019 a las 8:18

avatar de usuario
jeque arman

Hay más de una forma de lograr esto con múltiples hosts. Uno es con .htaccess y el otro con php.

Con .htaccess:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.example|dev02.otherdomain.example)$" AccessControlAllowOrigin=$0
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header merge Vary Origin
</IfModule>

Con PHP:

$origin = $_SERVER['HTTP_ORIGIN'];

if ($origin == "http://www.domain1.com"
        || $origin == "http://www.domain2.com"
        || $origin == "http://www.domain3.com") {
    header("Access-Control-Allow-Origin: $origin");
}

  • Desafortunadamente, esto no resolvió el problema, pero modificar .htaccess me acercó a la solución. Edité la pregunta original para reflejar lo que descubrí.

    – Jaakko Karhu

    16 de enero de 2019 a las 18:42

  • Esto podría significar que su htaccess no puede anularse en su otro servidor. Cambie allowOverride None a allowOverride All en el archivo httpd.conf de apache. Avíseme si funciona. O su mod_headers está habilitado.

    – Arman jeque

    17 de enero de 2019 a las 6:23

avatar de usuario
Adán Griffith

El encabezado ‘Access-Control-Allow-Origin’ contiene varios valores ‘www.theothersiteurl.com, *’, pero solo se permite uno.

Debe tener mucho cuidado de establecer solo este encabezado en un punto. Esto se puede hacer en 3 lugares:

  • Configuración básica de Apache
  • .htaccess
  • PHP

Recomendaría hacerlo dentro de la configuración central de Apache, por motivos de rendimiento y seguridad.

Sin embargo, si desea lograr esto usando el archivo .htaccess, asegúrese de que nada lo esté modificando en PHP y asegúrese de que AllowOverride esté permitido en el <VirtualHost> bloquear.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad