Zwracanie „200 OK” w Apache dla żądań OPTIONS HTTP

12

Próbuję wdrożyć kontrolę dostępu HTTP między domenami bez dotykania żadnego kodu.

Mój serwer Apache (2) zwraca prawidłowe nagłówki kontroli dostępu z tym blokiem:

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

Teraz muszę uniemożliwić Apache wykonanie mojego kodu, gdy przeglądarka wysyła HTTP OPTIONSżądanie (jest przechowywane w REQUEST_METHODzmiennej środowiskowej), zwracając je 200 OK.

Jak skonfigurować Apache, aby odpowiadał „200 OK”, gdy metoda żądania to OPCJE?

Próbowałem tego mod_rewritebloku, ale nagłówki kontroli dostępu zostały utracone.

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]       
Mark McDonald
źródło

Odpowiedzi:

12

Dodajesz nagłówek do odpowiedzi nieudanej (innej niż 2xx), takiej jak przekierowanie, w którym to przypadku w odpowiedzi ostatecznej używana jest tylko tabela odpowiadająca zawsze.

Prawidłowy „Zestaw nagłówka”:

Header always set Access-Control-Allow-Origin "*"                   
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
alvosu
źródło
7

Jeśli ustawisz katalog dla uwierzytelnionego dostępu, przeglądarki takie jak Chrome i Safari (być może także inne) zawsze wysyłają niepotwierdzone żądanie OPTIONS przed wywołaniem XmlHttpRequest, które zawsze otrzymuje wartość 401 i kończy się niepowodzeniem, jeśli nie ustawimy konfiguracji pliku / apache apletu .htaccess aby umożliwić metodę OPTIONS bez konieczności uwierzytelniania. To doprowadzało mnie do szału przez 2 dni i to jest rodzaj „ezoterycznych” informacji, które webmasterzy trzymają w tajemnicy, tak myślę! W każdym razie skonfigurowałem mój .htaccess w ten sposób i teraz działa:

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

Następnie musisz poprawnie ustawić nagłówki w skryptach PHP.

La Muerte Peluda
źródło
1
Ta ostatnia linia jest ważna. Jeśli usługa bazowa nie może obsłużyć OPTIONSżądania, pojawi się błąd 404.
user2297366
7

Czasami to podejście może pomóc:

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

Jest to przydatne, gdy masz serwer podobny do apache

Nick Olszański
źródło
odblokowało dla mnie prośby. zaskakująco. na Apache 2.4 Z tą regułą na blank.html, która nie istnieje!
Nadir