Restituzione di "200 OK" in Apache su richieste OPTIONS HTTP


12

Sto tentando di implementare il controllo di accesso HTTP tra domini senza toccare alcun codice.

Ho il mio server Apache (2) che restituisce le intestazioni corrette del controllo di accesso con questo blocco:

Header set Access-Control-Allow-Origin "*"                   
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" 

Ora devo impedire ad Apache di eseguire il mio codice quando il browser invia una HTTP OPTIONSrichiesta (è memorizzata nella REQUEST_METHODvariabile d'ambiente), ritornando 200 OK.

Come posso configurare Apache per rispondere "200 OK" quando il metodo di richiesta è OPTIONS?

Ho provato questo mod_rewriteblocco, ma le intestazioni di controllo di accesso sono perse.

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]       

Risposte:


12

Stai aggiungendo un'intestazione a una risposta non riuscita (non-2xx), come un reindirizzamento, nel qual caso nella risposta finale viene utilizzata solo la tabella corrispondente a sempre.

"Set di intestazioni" corretto:

Header always set Access-Control-Allow-Origin "*"                   
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"

7

Se imposti una directory per l'accesso autenticato, browser come Chrome e Safari (forse anche altri) inviano sempre una richiesta OPTIONS non accreditata prima della chiamata XmlHttpRequest, che ottiene sempre 401 e fallisce se non impostiamo la configurazione del file .htaccess / apache per consentire il metodo OPTIONS senza richiedere l'autenticazione. Ciò mi ha fatto impazzire per 2 giorni e questo è il tipo di informazioni "esoteriche" che i webmaster tengono segrete, immagino! Comunque ho configurato il mio .htaccess in questo modo e ora funziona:

AuthUserFile <path to password file>
AuthName "Thou shalt not pass!"
AuthType Basic
Options -Indexes
<LimitExcept OPTIONS>
  Require valid-user
</LimitExcept>

Quindi devi impostare correttamente le intestazioni sugli script PHP.


1
L'ultima riga è importante. Se il servizio Web sottostante non è in grado di gestire la OPTIONSrichiesta, riceverai un errore 404.
user2297366

7

A volte questo approccio può aiutare:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ blank.html [QSA,L]

È utile quando si dispone di un server simile ad Apache


ha sbloccato le richieste per me. sorprendentemente. su apache 2.4 Con questa regola su blank.html che non esiste!
Nadir,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.