HTML 5和使用XHR2的cookie的跨域请求

时间:2013-06-25 09:56:43

标签: html5 cookies xmlhttprequest cross-domain cors

我想在这里弄清楚HTML5中的CORS功能是如何工作的。在经过十多篇文章,博客和论文等之后,我非常理解这个概念,除了一件我感到困惑的事情。

我需要了解在XHR2的情况下cookie处理是如何工作的。我知道来自domain1.com的XHR2 COR请求需要具有以下用于cookie处理的设置: -

  

xhr.withCredentials = true;

其中xhr是XHR的对象。另外我知道这需要来自服务器的等效支持,服务器需要设置以下标头来支持这个请求: -

  

标题(“Access-Control-Allow-Origin:http://domain2.com”);

     

header(“Access-Control-Allow-Credentials:true”);

假设服务器位于domain1.com上,并且COR请求来自domain2.com

我想知道的是: -

  

case1: - domain2.com是否可以通过使用上述技术使用XHR2功能来检索domain1.com上domain1.com设置的cookie?

     

or case2:domain2.com是否只能从domain1.com上的domain1.com检索那个cookie,当然,再次使用上述技术?

如果case1正确,那么我在下面的地方出错我无法从domain1中检索cookie值: -

domain1.com/index.php

<?php
header("Access-Control-Allow-Origin: http://domain2.com");
header("Access-Control-Allow-Credentials: true");
header("Content-Type: text/html; charset=utf-8");
$value = "domain 1 cookie";

// send a simple cookie
setcookie("Dom1Cookie",$value);
?>
<html>
<head>
<title>
DOMAIN ONE
</title>
<script type="text/javascript" src="../javascript/dom1_javascript.js">
</script>
</head>
<body>
this is from doamin 1
</body>
</html>

domain2.com/index.php

<?php
$value = "domain 2 cookie";

// send a simple cookie
setcookie("Dom2Cookie",$value);
?>
<html>
<head>
<script type="text/javascript" src="http://domain2.com/javascript/dom2_normal.js">
</script>
</head>
<body onload="makeCorsRequest();">
this is from domain 2
</body>
</html>

domain2.com/javascript/dom2_normal.js(它负责处理COR请求和响应)

// Create the XHR object.
function createCORSRequest(method, url) {
  alert("inside createCORSRequest");
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // XHR for Chrome/Firefox/Opera/Safari.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // XDomainRequest for IE.
    xhr = new XDomainRequest();
    xhr.open(method, url);
    //xhr.responseType='Document';
  } else {
    // CORS not supported.
    xhr = null;
  }
  if(xhr!=null)
  {
    xhr.responseType = 'Document';
    xhr.withCredentials = true;
  }
  return xhr;
}

// Helper method to parse the title tag from the response.
function getTitle(text) {
  alert("inside getTitle");
  recvd=text.match('<title>(.*)?</title>')[1];
  alert("in the getTitle() value is "+recvd);
  return recvd;
}

// Make the actual CORS request.
function makeCorsRequest() {
   alert("inside make request");
  // All HTML5 Rocks properties support CORS.
  var url = 'http://domain1.com';

  var xhr = createCORSRequest('GET', url);
  if (!xhr) {
    alert('CORS not supported');
    return;
  }

  // Response handlers.
  xhr.onload = function() {
    alert("inside onload");
    //var text = xhr.responseText;
    //alert("in onlaod() text is "+text);
    //var title = getTitle(text);
    //alert(title);
    //alert('Response from CORS request to ' + url + ': ' + title);
    **var text=xhr.cookie;
    alert(text);**
  };

  xhr.onerror = function() {
    alert("inside onerror");
    alert('Woops, there was an error making the request.');
  };
  alert("sending the request");
  xhr.send();
}

星号标记的代码应该警告cookie值,而只是警告“未定义”。有人可以解释一下原因吗?

否则,如果case2是正确的,那么请告诉我如何才能真正实现我在使用XHR2的情况下尝试的内容。

0 个答案:

没有答案