Возврат «200 OK» в 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 OK", когда метод запроса - ОПЦИИ?

Я пробовал этот 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.
user2297366

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]

Это полезно, когда у вас есть Apache-подобный сервер


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