Повернення "200 ОК" в Apache на HTTP-запити OPTIONS


12

Я намагаюся реалізувати міждоменний контроль доступу HTTP, не торкаючись жодного коду.

У мене сервер Apache (2) повертає правильні заголовки контролю доступу за допомогою цього блоку:

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

Зараз мені потрібно не допустити Apache виконувати мій код, коли браузер надсилає HTTP OPTIONSзапит (він зберігається у REQUEST_METHODзмінній оточення), повертаючись 200 OK.

Як я можу налаштувати Apache на відповідь "200 ОК", коли методом запиту є ВАРІАНТИ?

Я спробував цей mod_rewriteблок, але заголовки контролю доступу втрачені.

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

Відповіді:


12

Ви додаєте заголовок до невдалої (не 2xx) відповіді, наприклад, переадресації, і в цьому випадку в кінцевій відповіді використовується тільки таблиця, що відповідає завжди.

Правильний "Набір заголовків":

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

7

Якщо ви встановите каталог для автентифікованого доступу, такі веб-переглядачі, як Chrome і Safari (можливо, і інші), завжди надсилають незавірений запит OPTIONS перед викликом XmlHttpRequest, який завжди отримує 401 і виходить з ладу, якщо ми не встановимо конфігурацію файлу / apache .htaccess щоб дозволити метод OPTIONS, не вимагаючи аутентифікації. Це ганяло мене за 2 дні, і це така "езотерична" інформація, яку веб-майстри зберігають як таємницю! У будь-якому випадку я налаштував свій .htaccess таким чином, і зараз він працює:

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

Тоді вам доведеться правильно встановити заголовки у скриптах PHP.


1
Цей останній рядок важливий. Якщо базовий веб-сервіс не в змозі обробити OPTIONSзапит, ви отримаєте помилку 404.
користувач2297366

7

Іноді ця програма може допомогти:

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

Це корисно, коли у вас є сервер, схожий на апаш


він розблокував запити для мене. напрочуд. on apache 2.4 За допомогою цього правила на blank.html, яке не існує!
Надір
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.