HTTP OPTIONS 요청에서 Apache에서“200 OK”반환


12

코드를 건드리지 않고 도메인 간 HTTP 액세스 제어 를 구현하려고합니다 .

이 블록으로 Apache (2) 서버가 올바른 액세스 제어 헤더를 반환합니다.

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

브라우저가 HTTP OPTIONS요청을 보낼 때 ( REQUEST_METHOD환경 변수에 저장되어 있음) 아파치가 코드를 실행하지 못하도록하여을 반환해야 200 OK합니다.

요청 방법이 OPTIONS 일 때 "200 OK"로 응답하도록 Apache를 구성하려면 어떻게해야합니까?

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와 같은 브라우저 (다른 브라우저도 가능)는 XmlHttpRequest 호출 전에 항상 인증되지 않은 OPTIONS 요청을 보내며, .htaccess 파일 / 아파치 구성을 설정하지 않으면 항상 401을 받고 실패 인증없이 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

때때로이 approuch가 도움이 될 수 있습니다 :

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

아파치와 같은 서버가있을 때 유용합니다


그것은 나를 위해 요청을 잠금 해제했습니다. 놀랍게도. 아파치 2.4 존재하지 않는 blank.html 에서이 규칙을 사용하십시오!
Nadir
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.