クロスドメインを実装しようとしています 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]
リダイレクトなどの非成功(非2xx)応答にヘッダーを追加します。その場合、最終応答では、常に対応するテーブルのみが使用されます。
正しい「ヘッダーセット」:
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
認証されたアクセス用のディレクトリを設定した場合、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スクリプトでヘッダーを適切に設定する必要があります。
このアプローチが役立つ場合があります。
<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のようなサーバーがある場合に便利です。