Mengembalikan "200 OK" di Apache pada permintaan HTTP OPTIONS

12

Saya mencoba menerapkan kontrol akses HTTP lintas domain tanpa menyentuh kode apa pun.

Saya mendapatkan server Apache (2) saya yang mengembalikan tajuk Kontrol Akses yang benar dengan blok ini:

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

Saya sekarang perlu mencegah Apache mengeksekusi kode saya ketika browser mengirim HTTP OPTIONSpermintaan (itu disimpan dalam REQUEST_METHODvariabel lingkungan), kembali 200 OK.

Bagaimana saya dapat mengkonfigurasi Apache untuk merespons "200 OK" ketika metode permintaannya adalah OPTIONS?

Saya sudah mencoba mod_rewriteblok ini , tetapi header Access Control hilang.

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

Jawaban:

12

Anda menambahkan header ke respons non-sukses (non-2xx), seperti redirect, dalam hal ini hanya tabel yang sesuai dengan selalu digunakan dalam respons akhir.

"Header set" yang benar:

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

Jika Anda menetapkan direktori untuk akses yang diautentikasi, browser seperti Chrome dan Safari (mungkin yang lain juga) selalu mengirim permintaan OPSI yang tidak dirujuk sebelum panggilan XmlHttpRequest, yang selalu mendapat 401 dan gagal jika kami tidak mengatur konfigurasi file .htaccess file / apache untuk mengizinkan metode OPSI tanpa memerlukan otentikasi. Itu membuat saya gila selama 2 hari dan itu adalah jenis informasi "esoteris" yang dirahasiakan oleh webmaster, kurasa! Pokoknya saya mengkonfigurasi .htaccess saya seperti ini dan sekarang berfungsi:

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

Maka Anda harus mengatur header dengan benar pada skrip PHP.

La Muerte Peluda
sumber
1
Baris terakhir itu penting. Jika layanan web yang mendasarinya tidak dapat menangani OPTIONSpermintaan, Anda akan menerima kesalahan 404.
user2297366
7

Terkadang pendekatan ini dapat membantu:

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

Ini berguna ketika Anda memiliki server seperti apache

Nick Olszanski
sumber
itu membuka permintaan untuk saya. heran. pada apache 2.4 Dengan aturan ini pada blank.html itu tidak ada!
Nadir