HTTP SEÇENEKLERİ isteklerinde Apache'de “200 Tamam” döndürme


13

Herhangi bir koda dokunmadan etki alanları arası HTTP erişim denetimi uygulamaya çalışıyorum .

Apache (2) sunucumu bu blok ile doğru Erişim Kontrolü başlıklarını döndürerek aldım:

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

Artık tarayıcı bir HTTP OPTIONSistek gönderdiğinde ( REQUEST_METHODortam değişkeninde saklanır) Apache'nin kodumu yürütmesini engellemem gerekiyor 200 OK.

İstek yöntemi SEÇENEKLER olduğunda Apache'yi "200 Tamam" yanıtını verecek şekilde nasıl yapılandırabilirim?

Bu mod_rewritebloğu denedim , ancak Erişim Denetimi başlıkları kayboluyor.

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

Yanıtlar:


12

Yönlendirme gibi başarılı olmayan (2xx olmayan) bir yanıta üstbilgi ekliyorsunuz; bu durumda nihai yanıtta her zaman karşılık gelen tablo kullanılır.

Doğru "Başlık kümesi":

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

8

Kimliği doğrulanmış erişim için bir dizin ayarlarsanız, Chrome ve Safari (belki diğerleri de) gibi tarayıcılar, her zaman 401 alan ve .htaccess dosyası / apache yapılandırmasını ayarlamazsak başarısız olan XmlHttpRequest çağrısından önce her zaman kimlik bilgisi olmayan bir SEÇENEK isteği gönderir. kimlik doğrulaması gerektirmeden OPTIONS yöntemine izin vermek için. Bu beni 2 gün boyunca deli etti ve sanırım web yöneticilerinin gizli tuttuğu türden "ezoterik" bilgi. Neyse .htaccessimi şu şekilde yapılandırdım ve şimdi çalışıyor:

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

Sonra PHP komut dosyalarında üstbilgileri düzgün ayarlamanız gerekir.


1
Bu son satır önemlidir. Temeldeki web hizmeti OPTIONSisteği işleyemezse, bir 404 hatası alırsınız.
user2297366

7

Bazen bu yaklaşım yardımcı olabilir:

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

Apache benzeri bir sunucunuz olduğunda kullanışlıdır


benim için istekleri açtı. Şaşırtıcı. apache 2.4 üzerinde Bu kural ile blank.html'de mevcut değil!
Nadir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.