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]       

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"

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.


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


es hat Anfragen für mich freigeschaltet. überraschenderweise. auf apache 2.4 Mit dieser Regel auf blank.html existiert das nicht!
Nadir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.