やりたいこと
「サーバーA」にアップロードされているhoge.js
を外部のサーバーから読み込み実行できる状態にしたいです。
意図
いわゆるjsのライブラリやプラグインのように、自身のサーバーにアップしているjsコードを不特定多数のユーザー(サーバー)が読み込み使用できるようにしたいです。
外部サーバーからの読み込み
現時点では以下のように読み込みを行っています。
<script src="https://hoge.com/hoge.js"></script>
※</body>の直前で読み込みをしています。
現状の問題
CORSを設定するため、複数の情報を参考に「サーバーA」のルート直下の.htaccess
に以下を記述しました。
※サーバーはエックスサーバーを使用しています。
<IfModule mod_headers.c> Header set Access-Control-Allow-Origin * </IfModule>
上記以外にも、類似の解決策としてネットで調べてヒットする情報に記載の記述は一通り試してみましたが、いずれも上手くいっていません。
「サーバーA」のjsコードを読み込もうとしている外部サイトでは以下のようなエラーが出ています。
Blocked https://hoge.com/hoge.js from asking for credentials because it is a cross-origin request. Origin http://sample.ne.jp is not allowed by Access-Control-Allow-Origin. Failed to load resource: Origin http://sample.ne.jp is not allowed by Access-Control-Allow-Origin. Cross-origin script load denied by Cross-Origin Resource Sharing policy.
※「hoge.com」が「サーバーA」です。
※「sample.ne.jp」が「hoge.com」からjsコードを読み込もうとしている外部サーバーです。
アドバイスいただきたいこと
そもそもサーバーAのjsが読み込めない理由(クロスオリジンだから)は概ね理解しているのですが
その解決方法として用いられているCORSについては初歩的なことしか理解できていない状態です。
上記の記述Header set Access-Control-Allow-Origin *
で
すべてのリクエストを許可しているという趣旨はわかるのですが
これを書いてもエラーが改善しない理由や、そもそもhtaccessへの記述の仕方については
不明点が多いです。
お手数をおかけしますが、改善策や解決案をご教示いただけますと幸いです。
追加で行った検証について
改めて以下の内容で検証したところ、一定の条件下でエラーが出る結果となりました。
■前提
・各サーバー内にある「index.php」「hoge.js」の中身は全く同じ
・index.phpの中には<head>などの必要最低限のHTMLとjsを読み込む<script>しか書き込んでいない
・hoge.jsの中にはconsole.log(‘読み込み成功’);というプログラムのみ記述
・検証したブラウザはいずれも最新バージョン
■結果
・Safariでエックスサーバーからjsを読み込む場合のみエラー(エラー内容は前述通り)
・Chromeではいずれの場合も読み込み成功
・さくらサーバーからjsを読み込む場合はいずれのブラウザでも読み込み成功
回答2件
あなたの回答
tips
プレビュー