クロスドメインAJAXを解決するために、いくつかの方法

クロスドメインの問題があるため発生します。

  • セキュリティ上の理由から、ブラウザの制限、。レセプションでは、バックエンドにアクセスし、ブラウザのおせっかいな新聞のクロスドメインの問題が、実際にはフロントデスクの背面にアクセスすることができます。

  • クロスドメインプロトコル、ドメイン名、ポートは同じではありません、それはクロスドメインであることを任意のブラウザ。

  • XHR(XMLHttpRequestの)要求アヤックスがXHRリクエストなので、ブラウザは、クロスドメインの問題をキャプチャします。

ソリューション:

  • 、ブラウザは制限しませんしましょうパラメータを指定すると、ブラウザがチェックを行うが、この方法が合理的ではありませんしましょう、それは変更を行うには、誰もが必要です。

  • クロスドメインは、ブラウザが文句を言わないようにしても、XHR要求をしないでください、解決策はJSONPは、スクリプトを介して要求を発行することによって、動的なスクリプトを作成することです。

  • ビューの間の点で:一つは、呼び出し元コードプラスブラウザに指示フィールド、クロスドメインのサポート、サポートコールを修飾します

  • ドメイン名がBドメインに割り当てられているプロキシアドレスを要求するnginxのプロキシモードで。

クロスドメインソリューション:

  • 呼び出し先が解決:指定したフィールドを高めるために最初の要求に応答して、発信者を可能にするブラウザに指示します。この溶液は、ブラウザから直接送信される要求。サーバー側の実装、nginxの設定Apacheの設定)

  • 発信者解決策:これは隠されたクロスドメイン決済法です。このクロスドメインリクエストをブラウザから直接送信されますが、過去のhttpサーバの途中から転送されません。

お使いのブラウザは制限しません設定します。

  • あなたはCDのCを切り替えるDOSでこのパスを使用して、ブラウザの完全なパスを検索するためのソフトウェアを使用することができますEveryting:\ Users \ユーザー管理\のAppData \ローカル\ Googleの\クローム\アプリケーション

  • クロム--disable-ウェブセキュリティを入力し--user-データ-DIR = G:\ TEMP3(グラムTEMP3データ記憶ディスク・ファイルを簡単に作成することができます)

使用して、解決するJSONP:

  • JSONP(JSONパディングとは)クロスドメインのデータが読み込まれていること、それは他のウェブドメイン名(ウェブサイト)から情報を取得することができますJSON「使用モード」です。なぜ我々は(JSONP)からのデータにアクセスするために、それを特殊な技法異なるドメイン(Webサイト)が必要ですか?これは、同一生成元ポリシーからです。同一生成元ポリシー、それは今、すべてのJavaScript対応のブラウザでは、この戦略を使用しますが、Netscapeが提案されている既知のセキュリティポリシーです。

  • 遠位AJAXリクエストの設定方法  :dataTypeとJSONP 、  JSONP:コールバック、  キャッシュ:trueに

  • 増加する背景必要JsonpAdviceクラスを

  • JSONPはGETをサポートしています
  • コード・サーバーへの変更を要求します
@ControllerAdvice
 パブリッククラスJsonpAdvice AbstractJsonpResponseBodyAdviceを拡張{ 
    パブリックJsonpAdvice(){ 
        // TODO自動生成されたスタブコンストラクタ
         // これは名前とAjax JSONP必要ですとして「コールバック」セット
       スーパー(「コールバック」); 
    } 
}

 

).then(関数(結果){ 
                    にconsole.log(結果); 
                }); 
            } //


            タイムアウト各テストケース 
        = 1000 jasmine.DEFAULT_TIMEOUT_INTERVAL ;
          // 接頭要求インターフェース//  HTTP:// localhostを:8080 /テスト 
        VARベース= "/ ajaxserverapache" ;
          // テストモジュール 
        ( "クロスドメイン"を記述関数(){ // 試験方法 
            を( "JSONPリクエスト" 、関数(DONE){
                 // サーバリターン結果
                VAR結果、
                $アヤックス({ 
                    URL:ベース + "/ GET1" 
                    データ型: "JSONP" 
                    JSONP :「コールバック」
                    キャッシュ:trueに
                    成功:機能(JSON){ 
                        結果 = JSON; 
                    } 
                }); 
                // これは非同期要求、setTimeoutを検証する必要性であるため
                のsetTimeout(関数(){ 
                    期待(結果).toEqual({
                         "データ": "GET1 OK" 
                    }); 

                    // チェック完了通知フレームジャスミン
                    DONE(); 
                }、 100 ); 
            }); 
        });
     </ SCRIPT> 
</ BODY> 

</ HTML>

フィルタソリューション(呼び出し元):

  • フィルタスタートアップクラスspringBootで提​​供型フィルタ

  • 特定のフィルタリングパラメータ情報を設定します。

@SpringBootApplication
 パブリック クラスAjaxserverApplication {
     公共 静的 ボイドメイン(文字列[]引数){ 
        SpringApplication.run(AjaxserverApplication。クラス、引数)。
    } 

    @Bean 
    公共FilterRegistrationBean registerFilter(){ 
        FilterRegistrationBeanビーン = 新しいFilterRegistrationBean()。
        bean.addUrlPatterns( "/ *" );
        //   设置自定义的フィルタ类 
        bean.setFilter(CrosFilter());
        リターン豆。
    } 
}
パブリック クラス CrosFilter 実装フィルタ{ 
    @Override 
    公共 ボイドのinit(に、FilterConfigに、FilterConfig)はスローServletExceptionが{
         // TODO自動生成方法スタブ
    } 

    @Override 
    公共 ボイドのdoFilter(のServletRequest要求たServletResponse応答
        れるFilterChain鎖)スローにIOException、ServletExceptionが{
         // TODOを自動生成方法スタブ 
        HttpServletResponseのRES = (HttpServletResponseの)応答。

        HttpServletRequestのREQ = (HttpServletRequestの)要求。

        起源のString = req.getHeader( "起源" ); 

        IF(!Org.springframework.util.StringUtils.isEmpty(起源)){
             // 時間のクッキーで、起源は完全に一致しなければならない、あなたが使用することはできません* 
            res.addHeader( " --control-許可アクセス起源" 原点); 
        } 

        res.addHeader( "アクセス制御-許可-方法"" * " ); 
        文字列のヘッダー = req.getHeader("リクエスト・アクセス・コントロール・ヘッダ」)。

        //は、すべてのカスタムヘッダーをサポートして
        IF(!{org.springframework.util.StringUtils.isEmpty(ヘッダ))
            res.addHeader(「アクセス制御-許可-ヘッダ」、ヘッダ);
        }
        res.addHeader(「アクセス・コントロール・マックス・エイジ」、「3600」)。
        // クッキーの有効 
        res.addHeader( "とAccess-Control-Allow-Credentials"、 "真の" )。
        chain.doFilter(リクエスト、レスポンス)。
    } 

    @Override 
    公共 ボイド破壊(){
         // TODO自動生成方法スタブ
    } 
}

 

おすすめ

転載: www.cnblogs.com/haha66/p/12004178.html