IE 9のF 12ツール、「ネットワーク」のページにサインし、「キャプチャ開始」をクリックすると、要求表示の状態が「保留」の分析と解決

3331 ワード

最近のプロジェクトでは、クライアントはjqueryでajaxリクエストを記述し、サービス側はstruts 2フレームワークを採用しています.JS送信要求とaction処理要求中に問題が発生した.最初は問題が怪しいと思っていたが、よく位置づけてからやっと問題を発見した.問題は解決したが、もっと深い原因はまだ分からない.大牛たちの指導を歓迎する.
1.問題現象
  • クライアントの問題
  • IE 9の開発者ツールF 12では、ブラウザがpostリクエストを送信していることがわかりましたが、このリクエストの「結果」欄には「終了」、「イニシエータ」値には「保留」が表示されます.リクエストヘッダ、リクエストボディ、レスポンスヘッダ、レスポンスボディは空です.つまりブラウザが異常なリクエストを送信したということです.
  • サービス側問題
  • Struts 2のactionはpostの要求を受け入れることができるが,要求パラメータの値は取得できない.
    2.関連JSコード
    function sendMessage()   
    {  
      $.post("indvAction!sendShortMsg.action", {  
         "configType" : "1"  
      });  
    }  
       
    //         
    Nf.promptConfirm({  
                      message :”operation success”,
    				  width : 300,
    				  height : 150, 
    				  handler : function(btn)
    							{
    								if (btn == "ok") 
    								{  
    									//      ajax    
    									sendMessage()
    									//        
    									NfLayout.closeTab();  
    								}  
    							
    							}
    
                      });

    3.位置決めプロセス
    F 12の使用を開始したばかりで、位置決めの問題に関する情報は得られませんでした.httpWatchまたはburp suiteを使用してhttpパッケージをキャプチャし、元のhttpリクエストと応答メッセージを表示します.その結果、問題が見つかりました.
    1、ブラウザからの要求メッセージには、configTypeフィールドの値が確かに渡されていません.要求メッセージは次のとおりです.
             
    POST /mobile/jsp/indvconfig/indvAction!sendShortMsg.action HTTP/1.1
    x-requested-with: XMLHttpRequest
    Accept-Language: zh-CN,en;q=0.5
    Referer: https://*.*.*.*:17243/mobile/jsp/indvconfig/indv_config.jsp
    Accept: */*
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
    Host: 11.12.213.87:17243
    Content-Length: 0
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: JSESSIONID=62C9FF9CBC97731B120ABAC297C4E4C5

    2、ブラウザは確かにサーバーの応答メッセージを受け取った.
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: text/plain;charset=UTF-8
    Vary: Accept-Encoding
    Date: Fri, 22 Nov 2013 01:34:31 GMT
    Content-Length: 6
    
    this is my response!

    実はすべて正常で、ブラウザは確かにHTTPリクエストを送信して、ただリクエストパラメータ値を携帯していないだけで、IE 9の展示方式にだまされただけで、位置決めを始めたばかりで長い間手がかりがありませんでした.ブラウザがajaxリクエストを送信したのに、リクエストパラメータを携帯していないのはなぜですか?なぜIE 9は要求が「保留中」、「終了済み」であることを示しているのか.
    4.問題解決
    NfLayoutを取り除くcloseTab();このコードで問題を解決できます.これは、jqueryのPOSTリクエストが非同期であるため、postリクエストがデータの準備ができていない場合、このときNfLayoutが実行される.closeTab();現在のページが閉じると、ブラウザがhttpリクエストを終了します.これにより、要求が異常に終了したことに相当し、IE 9は要求が「保留中」、「終了済み」であることを示す.具体的な深層の原因ははっきりしていないが、以下は個人の推測と解釈である.
    1、JSコードはロードのみが実行され、jsロードがトリガーされるのはhtml/jspページの表示です.だから、Html/jspはjsの実行環境だと思います.jsがまだ実行されていない場合、ページが閉じると、後続のjs世代は実行されません.テストコードは次のとおりです.
    <head>
     <script type='text/javascript'>
     function test()
     {
      alert(1111);
      window.opener = "";
      window.open("","_self");
      window.close();
      alert("       ,        。");
      //setTimeout('callBack( )', 3000)
     }
     </script>
    </head>
    <body>
     <input id="button_-12 " type="button" value="testRight" onclick="test();">
    </body>

    個人的には、jqueryパッチワークのリクエスト体かもしれませんが、比較的時間がかかり、まだ実行が完了していません.このときページが閉じてJSが実行を終了し,ブラウザから不完全なHTTPリクエスト(リクエスト体が添付されていない)が1つ送信された.これは個人の推測で、みんなは自分の見解があって、指導を歓迎します.この結論に基づいて、POST要求をGet要求に変更し、IE 9は要求終了を示しているが、サービス側は要求のパラメータ値を受信することができるようになった.