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.