実現したいこと
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
1<Directory "C:/xampp/htdocs"> 2 # ... 3 4 # 開発環境のアドレス 5 Header set Access-Control-Allow-Origin "https://localhost:7096" 6 7 Header set Access-Control-Allow-Methods "GET, POST, HEAD, OPTIONS" 8 Header set Access-Control-Allow-Headers "Origin, withcredentials" 9 Header set Access-Control-Allow-Credentials "true" 10</Directory>
実行するコード(localhostに対してgetアクセスしています。localhostはapacheの80ポートを利用)
index.js
1axios({ 2 method: "get", 3 url: "http://localhost", 4 headers: { 5 "Content-Type": "application/x-www-form-urlencoded;" 6 7 // これをつけると警告はなくなるが、preflight requestが発生する 8 "withCredentials": true 9 }, 10 params: { value: "GETで渡すパラメーター" } 11}).catch((response) => { 12 console.log("ng") 13});
Google Chrome警告内容
Access to XMLHttpRequest at ... from origin 'https://localhost:7096' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'http://localhost:7096' that is not equal to the supplied origin.

回答2件
あなたの回答
tips
プレビュー