Apacheでオリジン間リソース共有 (CORS)を利用して、プリフライト・リクエスト(preflight request)を実行せずにアクセスしたい

実現したいこと

Apacheでオリジン間リソース共有 (CORS)を利用して、プリフライト・リクエスト(preflight request)を実行せずにアクセスしたいです。
社内システム(httpサーバー) → Apacheのlocalhostの単純なphpファイルに対してGETアクセスし、
エクスプローラーが実行されるようにしています。

下記の設定ではプリフライト・リクエストが発生するので、2回実行されて困っています。(エクスプローラーが2回開くということ)

セキュリティ上 仕方がないことですが、それを回避する方法がないか調べています。

(試したこと)
①axiosのHeaderから"withCredentials": trueを除くと、GETアクセスはできるのですが、
プリフライト・リクエストは発生せず、1回実行します。 しかし、Google Chromeのコンソールに警告が出ます。

②axiosのHeaderに"withCredentials": trueをつけても、GETアクセスはできるのですが、
プリフライト・リクエストで2回実行してしまいます。 Google Chromeのコンソールには警告が出ないです。

(調べたこと)
https://qiita.com/nnishimura/items/1f156f05b26a5bce3672
単純リクエストであればプリフライト・リクエストが発生しないということ。
withCredentials": trueがあると単純リクエストにならないみたいです。
除くと単純リクエストになりますし、1回のみ実行になりますが、警告が出てしまうところが気になります。

わかるかたいらっしゃいましたらお願いします。

現在のapacheの設定と、実行するコード

apacheの設定

httpd.conf

<Directory "C:/xampp/htdocs"> # ... # 実際は社内システム(httpサーバー)のアドレス Header set Access-Control-Allow-Origin * Header set Access-Control-Allow-Methods "GET, POST, HEAD, OPTIONS" Header set Access-Control-Allow-Headers "Origin, withcredentials" Header set Access-Control-Allow-Credentials "true" </Directory>

実行するコード(localhostに対してgetアクセスしています。localhostはapacheの80ポートを利用)

index.js

axios({ method: "get", url: "http://localhost", headers: { "Content-Type": "application/x-www-form-urlencoded;" // これをつけると警告はなくなるが、preflight requestが発生する "withCredentials": true }, params: { value: "GETで渡すパラメーター" } }).catch((response) => { console.log("ng") });

コメントを投稿

0 コメント