2011-04-03 12 views
2

帮助我更好地理解AJAX和跨站点脚本。编写AJAX非常简单。如果我想异步读取网站的HTTP头,我会做这样的事情:AJAX和跨站点脚本读取头文件

var req = new XMLHttpRequest(); 
req.open('HEAD', 'http://www.stackoverflow.com/', true); 
req.onreadystatechange = function (aEvt) { 
    if (req.readyState == 4) { 
    if(req.status == 200) 
     alert(req.responseText); 
    else 
     alert("Error loading page"); 
    } 
}; 
req.send(null); 

然而,当我复制和使用记事本粘贴到一个简单的HTML页面,并尝试在本地,在运行请求状态似乎不会返回200.我假设这是由于跨站点脚本。我将如何解决这个问题?

回答

1

我的第一个猜测是,试图使这就像一个网关本地PHP文件:

<?php 
    echo get_headers($_GET['url']); 
?> 

然后,执行GET要求与目标网站作为参数的URL,并解析请求确定您的原件的响应标头。

我不认为这是可能的 JS,所以你必须使用一些服务器端代码。

0

有两种类型的 “本地”:

  • 使用本地服务器(HTTP://本地主机/)
  • 访问HTML文件直接(文件:/// C:\ A \ B \ c.html)

在第二种情况下AJAX将无法工作。

2

你是对的,除非你使用跨源资源共享(CORS,http://www.w3.org/TR/cors/),否则不允许跨域请求请求。 CORS有一个客户端和服务器端组件。在客户端,请求看起来大部分看起来像一个常规的XmlHttpRequest,除了您可以配置一些其他属性和处理程序。在服务器上,响应需要发出一些特殊的http头文件。本文给出的CORS是如何工作的客户端和服务器上的一个很好的细分:http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/