【コンピュータネットワーク】Ajax通信プロセスにCookieを持ち込むにはどうすればいいですか?

2553 ワード

Ajax
1.ajaxとコード実装を紹介する
1.1基本概念
JavaScriptとXML(Asynchronous JavaScript And XML).簡単に言えば、XMLHttpRequestオブジェクトを使用してサーバと通信します.JSON、XML、HTML、textテキストなどのフォーマットでデータを送信および受信できます.AJAXが最も魅力的なのは、その「非同期」特性です.つまり、ページを再リフレッシュせずにサーバと通信したり、データを交換したり、ページを更新したりすることができます.
Ajax | MDN
1.2簡単なAjaxを作成する
  • XMLHttpRequestオブジェクトを作成する
  • if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+ ...
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE 6 and older
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
  • バインドonreadystatechangeイベント
  • httpRequest.onreadystatechange = function(){
        // Process the server response here.
    };
  • サーバに要求
  • を送信する.
    httpRequest.open('GET', 'http://www.example.org/some.file', true);
    httpRequest.send();

    完全な例
    function ajax(url, cb) {
      let xhr;
      if(window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
      } else {
        xhr = ActiveXObject("Microsoft.XMLHTTP");
      }
      xhr.onreadystatechange = function() {
        if(xhr.readyState == 4 && xhr.status == 200) {
          cb(xhr.responseText);
        }
      }
      xhr.open('GET', url, true);
      xhr.send();
    }

    1.3 httpRequest.readyStateの値(熟記)
  • 0(未初期化)or(要求未初期化)
  • 1(ロード中)or(サーバリンク確立済み)
  • 2(ロード成功)or(リクエスト受諾)
  • 3(インタラクション)or(処理要求)
  • 4(完了)or(要求が完了し、応答が準備されている)
  • 1.4サービス側から返されるデータへのアクセス
  • httpRequest.responseText
  • サーバは、
  • をテキスト文字で返す.
  • httpRequest.responseXML
  • はXMLDocumentオブジェクトとして返され、その後JavaScriptを使用して
  • を処理することができる.

    1.5 GET注意事項
  • 応答ヘッダCache-Control: no-cacheを設定しないと、ブラウザは応答をキャッシュし、要求を再送信することはできません.タイムスタンプや乱数など、常に異なるGETパラメータを追加することもできます(詳細はbypassing the cacheを参照).
  • 1.6 POST要求
    [!NOTE]POSTリクエストは、RequestHeaderがバックグラウンドにコンテンツを伝える符号化方式およびsendメソッドに対応する値を入力するように設定する必要がある
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-Type": "application/x-www-form-urlencoded");
    xhr.send("key1=value1&key2=value2");

    1.7 Ajaxがクッキーをどのように携帯するか(面接加点)
  • ajaxは自動的に同源のcookieを持ってきて、異源のcookie
  • を持っていません
  • は、フロントエンドがwithCredentialsをtrueに設定し、バックエンドがHeaderを設定することでajaxに異なるソースのクッキーを自動的に持ち込むことができますが、この属性は同じソース要求に何の影響もありません.自動的に無視されます.

  • withCredentials | MDN
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://example.com/', true);
    xhr.withCredentials = true;
    xhr.send(null);