Rückgabe von "200 OK" in Apache bei HTTP OPTIONS-Anfragen

12

Ich versuche, eine domänenübergreifende HTTP-Zugriffssteuerung zu implementieren, ohne Code zu berühren.

Mein Apache (2) -Server gibt die korrekten Access Control-Header mit diesem Block zurück:

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

Ich muss jetzt verhindern, dass Apache meinen Code ausführt, wenn der Browser eine HTTP OPTIONSAnforderung sendet (die in der REQUEST_METHODUmgebungsvariablen gespeichert ist) und zurückkehrt 200 OK.

Wie kann ich Apache so konfigurieren, dass er auf "200 OK" antwortet, wenn die Anforderungsmethode OPTIONEN ist?

Ich habe diesen mod_rewriteBlock ausprobiert , aber die Access Control-Header gehen verloren.

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

Antworten:

12

Sie fügen einer nicht erfolgreichen Antwort (nicht 2xx) einen Header hinzu, z. B. eine Umleitung. In diesem Fall wird in der endgültigen Antwort nur die Tabelle verwendet, die immer entspricht.

Richtiges "Header Set":

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

Wenn Sie ein Verzeichnis für den authentifizierten Zugriff festlegen, senden Browser wie Chrome und Safari (möglicherweise auch andere) vor dem Aufruf von XmlHttpRequest immer eine nicht-inkrementelle OPTIONS-Anforderung, die immer 401 abruft und fehlschlägt, wenn die .htaccess-Datei / Apache-Konfiguration nicht festgelegt wird OPTIONS-Methode ohne Authentifizierung zuzulassen. Das hat mich 2 Tage lang verrückt gemacht und das ist die Art von "esoterischen" Informationen, die Webmaster für sich behalten, denke ich! Wie auch immer, ich habe meinen .htaccess so konfiguriert und jetzt funktioniert es:

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

Dann müssen Sie die Header in den PHP-Skripten richtig setzen.

La Muerte Peluda
quelle
1
Diese letzte Zeile ist wichtig. Wenn der zugrunde liegende Webdienst die OPTIONSAnforderung nicht verarbeiten kann, wird eine 404-Fehlermeldung angezeigt.
user2297366
7

Manchmal kann dieser Ansatz helfen:

<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]

Dies ist nützlich, wenn Sie einen Apache-ähnlichen Server haben

Nick Olszanski
quelle
es hat Anfragen für mich freigeschaltet. überraschenderweise. auf apache 2.4 Mit dieser Regel auf blank.html existiert das nicht!
Nadir