我想在这里弄清楚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的情况下尝试的内容。