2012-05-17 13 views
73

No puedo entender por qué mi configuración de encabezado .htaccess no funciona.Conjunto de encabezado Access-Control-Allow-Origin en .htaccess no funciona

Mi contenido .htaccess archivo:

Header set Access-Control-Allow-Origin * 
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 
Header always set Access-Control-Allow-Headers "*" 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [QSA,L] 

Pero cuando quito Header 's y añadirlos en index.php entonces todo funciona bien.

header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS"); 
header("Access-Control-Allow-Headers: *"); 

¿Qué me falta?

Respuesta

119

Esto debería funcionar:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
+34

No se olvide de activar los cabezales del módulo Apache 'headers' a2enmod –

+1

Se fija: "Método PUT no está permitido por Access-Control-Allow-Métodos" –

+4

Además, lo mejor es usar' Cabecera set' en este caso . Si el código se cambia y SÍ establece el encabezado, al hacer que Apache haga un 'header add' enviará doble ** encabezados. Esto romperá clientes como Restangular por ejemplo. – Julian

7

he un alojamiento compartido en GoDaddy. Necesitaba una respuesta a esta pregunta, también, y después de buscar descubrí que es posible.

Escribí un archivo .htaccess, lo puse en la misma carpeta que mi página de acciones. Estos son los contenidos del archivo .htaccess:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

Aquí está mi ajax llamada:

$.ajax({ 
     url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php', //server script to process data 
     type: 'POST', 
     xhr: function() { // custom xhr 
      myXhr = $.ajaxSettings.xhr(); 
      if(myXhr.upload){ // check if upload property exists 
       myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload 
      } 
      return myXhr; 
     }, 
     //Ajax events 
     beforeSend: beforeSendHandler, 
     success: completeHandler, 
     error: errorHandler, 
     // Form data 
     data: formData, 
     //Options to tell JQuery not to process data or worry about content-type 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 

Consulte este artículo para referencia:

Header set Access-Control-Allow-Origin in .htaccess doesn't work

13

Sólo para que conste, Me encontré con exactamente el mismo problema y ninguna de las respuestas funcionó.

que utiliza una herramienta de cabeceras cheker: http://www.webconfs.com/http-header-check.php

estaba probando con mi IP (http://xxx.xxx.xxx.xxx/upload) y lo volvió fue el siguiente:

HTTP/1.1 301 Moved Permanently => 
Date => Sat, 10 Jan 2015 04:03:35 GMT 
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
Location => http://xxx.xxx.xxx.xxx/upload/ 
Content-Length => 380 
Connection => close 
Content-Type => text/html; charset=iso-8859-1 

Hubo un cambio de dirección sucediendo y la petición ajax doesn 'honrar/seguir redirecciones.

Se trned a ser la barra que falta en el extremo del dominio (http://xxx.xxx.xxx.xxx/upload/)

Probé de nuevo con barra al final y tengo esta a continuación. Se agregó una barra en el guión también, y ahora estaba funcionando.

HTTP/1.1 200 OK => 
Date => Sat, 10 Jan 2015 04:03:53 GMT 
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By => PHP/5.3.8 
Access-Control-Allow-Origin => * 
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS 
Access-Control-Allow-Headers => * 
Content-Length => 1435 
Connection => close 
Content-Type => text/html 

Utilice esta herramienta para comprobar si sus encabezados son buenos y solucionar lo que está sucediendo.

+3

Tengo 11 pestañas abiertas en este momento tratando de resolver esto. Esta respuesta debería estar en más lugares. – JDavis

+0

es genial, aunque en mi escenario las reglas de htaccess funcionaban. – Adnan

+0

Con el mío, necesitaba eliminar la barra al final. Así que me alegro de haber encontrado esto. Pasé tanto tiempo solucionando problemas esto cuando recién debería haber estado trabajando hace horas. – gorelog

5

He activado los encabezados del módulo Apache a2enmod encabezados, y el problema se ha resuelto.

0

Después de pasar medio día sin nada trabajando. Usando un servicio de comprobación de encabezado aunque todo estaba funcionando. El servidor de seguridad en el trabajo se despojarlos

5

tener cuidado en: Cabecera añadir Access-Control-Allow-Origen "*" Esto no es del todo acertada para conceder acceso a todo el mundo.Es preferible dejar una lista de host de confianza sólo conocemos ...

Header add Access-Control-Allow-Origin "http://aaa.com" 
Header add Access-Control-Allow-Origin "http://bbb.com" 
Header add Access-Control-Allow-Origin "http://ccc.com" 

Saludos,

3

Prueba esto en el .htaccess de la carpeta raíz externa

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

tener cuidado en: Cabecera agregar Access-Control-Allow-Origin "*" Esto no es juicioso en absoluto para otorgar acceso a todos. Creo que deberías de usuario:

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "http://example.com" 
</IfModule> 
2

me han hecho +1 en la respuesta de Miró para el enlace a la página de cabecera ortográfico http://www.webconfs.com/http-header-check.php. Aparece un anuncio desagradable cada vez que lo usa, pero, sin embargo, es muy útil para verificar la presencia del encabezado Access-Control-Allow-Origin.

Estoy leyendo un archivo .json desde el javascript en mi página web. He descubierto que añadiendo lo siguiente a mi archivo .htaccess solucionó el problema al ver mi página web en Internet Explorer 11 (versión 11.447.14393.0):

<FilesMatch "\.(json)$"> 
    <IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "*" 
    </IfModule> 
</FilesMatch> 

También añade lo siguiente al /etc/httpd.conf (Apache archivo de configuración):

AllowOverride All 

el sitio de cabecera-inspector verifica que el Access-control-Allow-origen de cabecera está siendo enviado (gracias, Miró)!.

Sin embargo, Firefox 50.0.2, Opera 41.0.2353.69, y Edge 38.14393.0.0 todo buscar el archivo de todos modos, incluso sin el Access-Control-Allow-Origin cabecera. (Nota: es posible que estén verificando direcciones IP, ya que los dos dominios que estaba utilizando están alojados en el mismo servidor, en la misma dirección IPv4).

Sin embargo, Chrome 54.0.2840.99 m (64 bits) ignora el Access-control-Allow-origen de cabecera y no de todos modos, informar erróneamente:

No "Access-control-Allow-Origin cabecera está presente en la solicitada recursos. Origen '{midominio}' por lo tanto, no se permite el acceso.

Creo que esto tiene que ser una especie de "primero". IE está funcionando correctamente; Chrome, Firefox, Opera y Edge tienen errores; y Chrome es el peor. ¿No es eso exactamente lo contrario del caso habitual?

Cuestiones relacionadas