帮助我更好地理解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.我假设这是由于跨站点脚本。我怎么能绕过这个?
答案 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)
有两种类型的“本地”:
在第二种情况下,AJAX永远不会起作用。
答案 3 :(得分:0)
如果您的网页在http://stackoverflow.com上投放,则无法向http://localhost/发出ajax请求...
http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requests