2012-05-17 11 views
73

Non riesco a capire perché le mie impostazioni dell'intestazione .htaccess non funzionano.Set intestazione Access-Control-Allow-Origin in .htaccess non funziona

mio contenuto .htaccess del file:

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] 

Ma quando rimuovo Header 's e aggiungerli in index.php allora tutto funziona bene.

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

Cosa mi manca?

risposta

119

Questo dovrebbe funzionare:

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

Non dimenticare di attivare le intestazioni del modulo apache 'intestazioni a2enmod' –

+1

È stato risolto:" Metodo PUT non consentito da Access-Control-Allow-Methods " –

+4

Inoltre, è preferibile utilizzare' Header set' in questo caso . Se il codice viene modificato e imposta l'intestazione, avendo Apache un 'header add' invierà doppie intestazioni **. Ad esempio, questo romperà clienti come Restangular. – Julian

7

ho un hosting condiviso su GoDaddy. Avevo anche bisogno di una risposta a questa domanda, e dopo aver cercato in giro ho scoperto che è possibile.

Ho scritto un file .htaccess, lo metto nella stessa cartella della mia pagina di azione. Ecco il contenuto del file .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" 

ecco la mia chiamata AJAX:

$.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 
    }); 

si veda questo articolo di riferimento:

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

13

Solo per la cronaca, Stavo correndo nello stesso identico problema e nessuna delle risposte ha funzionato.

ho usato uno strumento intestazioni Cheker: http://www.webconfs.com/http-header-check.php

stavo testando con il mio IP (http://xxx.xxx.xxx.xxx/upload) e ciò che è tornato è stato il seguente:

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 

C'era un reindirizzamento accadendo e la richiesta ajax doesn essere onorato/seguire i reindirizzamenti

E trned rivelata la barra mancante alla fine del dominio (http://xxx.xxx.xxx.xxx/upload/)

ho provato di nuovo con slash alla fine e ho ottenuto questo qui di seguito. Aggiunta una barra nello script e ora funzionava.

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 

Utilizzare questo strumento per verificare se le intestazioni sono buone e per risolvere il problema.

+3

Ho 11 schede aperte in questo momento cercando di risolvere questo. Questa risposta dovrebbe essere in più punti. – JDavis

+0

è bello, anche se nel mio caso le regole htaccess funzionavano. – Adnan

+0

Con il mio, avevo bisogno di rimuovere la barra finale. Sono contento di averlo trovato. Ho trascorso così tanto tempo a risolvere il problema quando ho iniziato a funzionare avrebbe funzionato ore fa. – gorelog

5

Ho attivato le intestazioni del modulo Apache a2enmod e il problema è stato risolto.

0

Dopo aver trascorso mezza giornata senza nulla a lavorare. Utilizzo di un servizio di controllo intestazione anche se tutto funzionava. Il firewall sul lavoro è stata spogliando loro

5

Prestare attenzione su: Header aggiungere Access-Control-Allow-Origin "*" Questo non è affatto giudiziosa per concedere l'accesso a tutti.E 'preferibile lasciare una lista di solo un know host di fiducia ...

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" 

saluti,

3

Prova questo nel .htaccess della cartella principale esterna

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

Prestare attenzione su: Intestazione aggiungi Access-Control-Allow-Origin "*" Non è affatto giudizioso garantire l'accesso a tutti. Penso che si dovrebbe utente:

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

mi ha fatto +1 sulla risposta di Miro per il link al sito di intestazione-checker http://www.webconfs.com/http-header-check.php. Viene visualizzato un annuncio odioso ogni volta che lo si utilizza, ma è, tuttavia, molto utile per verificare la presenza dell'intestazione Access-Control-Allow-Origin.

Sto leggendo un file .json dal javascript sulla mia pagina web. Ho trovato che l'aggiunta del seguente al mio file .htaccess risolto il problema durante la visualizzazione mia pagina web in Internet Explorer 11 (versione 11.447.14393.0):

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

Ho anche aggiunto il testo seguente /etc/httpd.conf (Apache file di configurazione):

AllowOverride All 

il sito header-checker verificato che l'Access-Control-Allow-Origin intestazione sta per essere inviata (grazie, Miro)!.

Tuttavia, Firefox 50.0.2, Opera 41.0.2353.69, ed Edge 38.14393.0.0 tutto recuperato il file in ogni caso, anche senza Access-Control-Allow-Origin intestazione. (Nota: potrebbero controllare gli indirizzi IP, poiché i due domini che stavo utilizzando sono entrambi ospitati sullo stesso server, allo stesso indirizzo IPv4.)

Tuttavia, Chrome 54.0.2840.99 m (64-bit) ignora il Access-Control-Allow-Origin intestazione e non riesce in ogni caso, erroneamente segnalazione:

No 'Access-Control-Allow-Origin' intestazione è presente sul risorsa richiesta. L'origine '{mydomain}' non è quindi consentita l'accesso.

Penso che questa debba essere una sorta di "prima". IE funziona correttamente; Chrome, Firefox, Opera e Edge sono tutti buggati; e Chrome è il peggiore. Non è esattamente l'opposto del solito caso?

Problemi correlati