AJAX和跨站点脚本来读取标题

时间:2011-04-03 23:23:42

标签: javascript ajax http scripting cross-domain

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

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.我假设这是由于跨站点脚本。我怎么能绕过这个?

4 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

我的第一个猜测是尝试创建一个像网关一样的本地PHP文件:

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

然后,以目标网站的网址作为参数执行GET请求,并解析请求.responseText以确定原始网站的响应标头

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

答案 2 :(得分:0)

有两种类型的“本地”:

  • 使用本地服务器(http:// localhost /)
  • 直接访问HTML文件(file:/// C:\ a \ b \ c.html)

在第二种情况下,AJAX永远不会起作用。

答案 3 :(得分:0)