クロスドメインとは何ですか:実際には、クロスドメインブラウザのセキュリティ・メカニズム、要求AJAXドメイン名とアドレスの不一致へのアクセスを要求すると、ブラウザがリクエストから戻りません。人気のポイントです:AJAXによるページBサービスは、情報Aサービスをロード。
クロスドメインの原因は:現在のウェブサイトのドメインの要求では、デフォルトのドメインが、AJAXリクエストを介して他の送信を許可されていません。
http://b.com/b.jsp
b.jsp
ます。<script type = "text / javascriptの">
$(関数(){
$アヤックス({
タイプは、 "get"、URL: " http://a.com/MyServlet?userId=12344 "、キャッシュ:偽、データ型: "JSON"、成功:関数(データ){ にconsole.log(データ); } }); })
</ SCRIPT>
どのように解決するには?
1.jsonpがサポートする唯一の要求を取得し、要求がポストをサポートしていません
インターネット企業の実際の事例- 、springcloud zull 2.インタフェースゲートウェイは--nginx
3.httpclient内部転送
できるように、ヘッダー要求を追加します。4.クロスドメインアクセス
5.使用して、分散サービスフレームワークをダボ
1.jsonpのサポートのみが要求を取得し、要求がサポートされていないポスト
b.jsp
ます。<script type = "text / javascriptの">
$(関数(){
$アヤックス({
タイプは、 "get"、
非同期:偽、URL: " http://a.com/MyServlet?userId=12344」、データ型: "JSONP"、JSONP: "jsonpCallback"、 //服务器用于接收コールバック调用的機能名的参数キャッシュ:偽、データ型: "JSON"、成功:機能(データ){ はconsole.log(データ) ; } }); }) </スクリプト>
サービスの背景:
文字列= jsonpCallback request.getParameter(「jsonpCallback」);
と、その後のパラメーターを戻します。
結果= jsonpCallback +「(」+結果+「)」;
リターン結果、
JSONP原則分析:要求スクリプトを使用送信します、コールバックパラメータを渡します解像度を持ち帰りました。
ます。<script type = "text / javascriptの " SRC = "http://www.yy.com/static/common/jquery.js?t=2017-07-27"> </ SCRIPT>
JSONP常にちょうど要求を取得
2.インターフェイスゲートウェイ --nginx、springcloud zull -インターネット企業の実際のケース
ビルドエンタープライズAPIゲートウェイインターフェイスにnginxの使用。
インタフェースゲートウェイ:配布のためのすべての要求インターセプト。役割:アクセスコントロール。
ビルドのエンタープライズゲートウェイの実装原理にnginxのを使用してAPIインターフェース:同じドメイン名、異なるプロジェクトによって、実サーバへのインターセプトジャンプします。
http://www.edu.com/A - > http://a.com:8080/A
http://www.edu.com/B - > http://a.com:8080/B
AプロジェクトBプロジェクトを訪問します。http://www.edu.com/A使用nginxの前方
nginx.conf構成:
サーバー{
聞く80、
サーバ名 www.edu.com ;
#charset KOI8-R&LT;
#access_logログ/メインhost.access.log;
LOCATION / A {
proxy_pass http://a.com:8080/A
index.htmlのindex.htmのインデックス;
} LOCATION / B { proxy_pass http://b.com:8080/B インデックスのindex.htmlのindex.htm; } } 聞く:リスニングポート番号サーバー名:サービス名は、ページの表示proxy_passを:これらは、サーバの実際のアドレスに転送されているインターセプト転送サービスへのプロジェクトA:プロジェクト名場所/
B项目b.jsp
ます。<script type = "text / javascriptの">
$(関数(){
$アヤックス({
タイプは、 "get"、URL: " http://www.edu.com/A/MyServlet?userId = 12344」、キャッシュ:偽、データ型: "JSON"、成功:関数(データ){ にconsole.log(データ); } }); }) </スクリプト>
内部3.httpclientの転送
B项目b.jsp
ます。<script type = "text / javascriptの">
$(関数(){
$アヤックス({
タイプは、 "get"、URL: " http://b.com/BdemoServlet?userId=12344 "、キャッシュ:偽、データ型: "JSON"、成功:関数(データ){ にconsole.log(データ); } }); }) </スクリプト>
プロジェクトの背景B:
//デフォルトのリンクを作成
CloseableHttpClient HttpClientを= HttpClients.createDefault();
//リクエストを作成
HttpPost HttpPost =新新HttpPost( "http://a.com/MyServlet?userId=12344");
CloseableHttpResponseレスポンス= HttpClientを。実行(HttpPost);
INTコード= response.getStatusLine()getStatusCode();.
IF(コード200は==である){
文字列結果= EntityUtils.toString(response.getEntity());
のSystem.out.println(結果);
}
response.close();
httpClient.close();
短所:リソースの無駄が(何のクロスドメインの問題は存在しない)底が2つの要求をしました。まず:b.jsp初診Bプロジェクト要求、第二:取得するためのアクセスデータAプロジェクトにリクエストを送信するために再びBプロジェクト
の利点を:以下、セキュリティ、パケットキャプチャ解析。
クロスドメインアクセスのリクエストヘッダができます4。
B项目b.jsp
ます。<script type = "text / javascriptの">
$(関数(){
$アヤックス({
タイプは、 "get"、URL: " http://a.com/MyServlet?userId=12344 "、キャッシュ:偽、データ型: "JSON"、成功:関数(データ){ にconsole.log(データ); } }); }) </スクリプト>
Aに、MyServletは、コードプロジェクトに追加しました:
//ブラウザがすべてのクロスドメインアクセスを許可することができresponse.setHeader(「アクセス制御-許可 -Origin」、「*」);
5.は、分散サービスフレームワークをダボ。