web-dev-qa-db-ja.com

HTTP OPTIONSリクエストでApacheに「200 OK」を返す

クロスドメインを実装しようとしています HTTPアクセスコントロール コードに触れることなく==。

このブロックで正しいAccess Controlヘッダーを返すApache(2)サーバーがあります。

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

ブラウザがHTTP OPTIONSリクエスト(REQUEST_METHOD環境変数に保存されている)リクエストを送信して200 OKを返すときに、Apacheがコードを実行しないようにする必要があります。

リクエストメソッドがOPTIONSのときに「200 OK」と応答するようにApacheを設定するにはどうすればよいですか?

このmod_rewriteブロックを試しましたが、アクセス制御ヘッダーが失われています。

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

リダイレクトなどの非成功(非2xx)応答にヘッダーを追加します。その場合、最終応答では、常に対応するテーブルのみが使用されます。

正しい「ヘッダーセット」:

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

認証されたアクセス用のディレクトリを設定した場合、ChromeやSafari(おそらく他のものも))などのブラウザは、XmlHttpRequest呼び出しの前に常に認証されていないOPTIONSリクエストを送信します。 t .htaccessファイル/ Apache構成を設定して、認証を必要とせずにOPTIONSメソッドを許可します。これにより、2日間問題が発生しました。これは、ウェブマスターが秘密として保持している一種の「難解な」情報だと思います!とにかく、.htaccessをこのように構成しましたそして今それは動作します:

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

次に、PHPスクリプトでヘッダーを適切に設定する必要があります。

8

このアプローチが役立つ場合があります。

<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のようなサーバーがある場合に便利です。

7
Nick Olszanski