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環境変数に保存されている)、Apacheがコードを実行しないようにする必要があります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

認証済みアクセス用のディレクトリを設定すると、XmlHttpRequest呼び出しの前に、ChromeやSafariなどのブラウザ(おそらく他のブラウザも)は常に未認証のOPTIONSリクエストを送信します。認証を必要とせずに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
その最後の行は重要です。基礎となるWebサービスが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に存在するこのルールでは、存在しません!
ナディア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.