WebAPIをたたくWeb画面を作成しています。
ajax通信でAPIを叩くjsのプログラムなのですが、そのままではクロスドメイン制約に引っかかるので、本番利用のときはサーバーと同一ドメインに配置させてもらう予定でした。
が、サーバー側エンジニアのNGがでたためAPIと同じサーバーにはおけず、別サーバーをたてることになりました。
サーバー側のCORS対応もNGとのことです・・・。
そこで質問です。
1.別サーバーを立てた場合、メインドメインが同じならサブドメインが異なっていてもクロスドメイン制約にはひっかからないでしょうか?下記のようなイメージです。
- サーバー側ドメイン:api.xxxx.com
- クライアント側ドメイン:www.xxxx.com
2.もし1.がだめな場合、クライアントサイドをajax通信以外で開発し直す必要があります。
他にどのような言語、フレームワークを使うことが考えられるでしょうか?
クライアントサイドの開発知識がほぼないので、html,css,jsだけの単純な作りしか思いつかず。
ASP.net(C#)あたりならできるのかなと思いますが、開発コストが増えそうなので他に手段がないか調べています。
機能的にはAPIをたたいてレスポンスをキレイに加工して出す単純なものです。
1.で問題なければプログラムは変更しなくていいのですが、だめな場合他の方法を考えなければなりません。
WebサーバーとAPIサーバーが異なることはよくあると思うので、一般的にはどう解決しているのだろう?と疑問に思い質問させていただきました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 00:57
回答5件
0
ベストアンサー
1.別サーバーを立てた場合、メインドメインが同じならサブドメインが異なっていてもクロスドメイン制約にはひっかからないでしょうか?下記のようなイメージです。
「サーバー側のCORS対応もNG」ならクロスドメイン制約にひっかかります。
2.もし1.がだめな場合、クライアントサイドをajax通信以外で開発し直す必要があります。
jsonp使うしかないのでは?
セキュリティのレベルは落ちますがね。。。
サーバーサイドのAPIでのjsonp対応も必須になります。
というか、APIでjsonp対応できるのなら、「サーバー側のCORS対応」(APIでAccess-Control-Allow-Origin ヘッダー適切に返すことができると思います。
WebサーバーとAPIサーバーが異なることはよくあると思うので、一般的にはどう解決しているのだろう?と疑問に思い
一般的には「サーバー側のCORS対応」を行います。
投稿2019/10/04 00:25
総合スコア7918
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 00:31
2019/10/04 00:46
2019/10/04 00:55
2019/10/04 01:26 編集
2019/10/04 01:48
2019/10/04 02:30
0
その方針に反対で一切協力しない姿勢です。。。
まずはそれを解決するのが先決です。技術的に無理やり突破したところで、本来不必要な技術的負債を抱え込むことになりますし、最悪の場合はサーバサイドの変更で動かなくなる、という危険もあります。
投稿2019/10/04 01:02
総合スコア145977
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 01:07
2019/10/04 01:44
2019/10/04 02:20
2019/10/04 03:00
0
CORS も JSONP もダメと言うことですと、ブラウザから AJAX で別ドメインの API にアクセスするのは無理と思います(少なくとも自分は解決策は分かりません)。
なので質問 2 の、
ASP.net(C#)あたりならできるのかなと思いますが、
機能的にはAPIをたたいてレスポンスをキレイに加工して出す単純なものです。
についてレスします。
ASP.NET でもクライアントが使うのはブラウザなので、それからクロスドメインの API に AJAX で要求を出すことは、CORS も JSONP もダメならできません。
なので、ブラウザからクロスドメインの API に AJAX で要求を出すのではなく、サーバー側で HttpWebRequest / HttpWebResponse などを使って API に要求を出して情報を取得し、その情報を元に「レスポンスをキレイに加工して」クライアント(ブラウザ)に返してやるという方法が考えられます。
具体的には以下のような構成にするということです。
クライアント(ブラウザ)⇔ ASP.NET Web ページ ⇔ コードビハインドの HttpWebRequest ⇔ クロスドメインの API
同等のことができる Web アプリであれば ASP.NET である必要はないです。
投稿2019/10/04 01:44
退会済みユーザー
総合スコア0
0
開発者が手軽にやるなら、
ブラウザ側のセキュリティ設定で対応
(ブラウザごとに)
出来ますが、本番で別サーバで別ドメインにAPIがあるなら
jsと同じドメインのサーバに簡単な踏み台プログラムを作ってサーバサイド通信をさせる。
jsからは踏み台をAPIのエンドポイントにする
かなあ。
そもそもフロントから叩くAPIとして作られてないとかだとこういうケースはありますね。。。
投稿2019/10/04 00:29
編集2019/10/04 00:37総合スコア18727
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 00:37
2019/10/04 00:41
2019/10/04 01:28
2019/10/04 01:47
2019/10/04 02:04
2019/10/04 02:23
2019/10/04 02:27
退会済みユーザー
2019/10/04 02:39
2019/10/04 02:53
0
JSONP APIで解決すればよいでしょう
投稿2019/10/04 00:25
総合スコア116694
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 00:49
2019/10/04 00:56
2019/10/04 01:11
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。