1

我希望能够/robots.txt使用 JavaScript 从各种站点进行访问。这是一个测试站点可用性的辅助项目,并非所有站点都在我的控制之下。我试过这个:

    $.get(robotsUrl, function() {
            console.log('success!');
    }, "text")
        .fail(function() {
            console.log('failed :(');
        });

但是,这失败了

XMLHttpRequest cannot load https://my.test.url/robots.txt. Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin

MDN 在 Same-Origin-Policy 上的页面说,可以使用某些元素嵌入内容,例如<script>, <iframe> <embed>. 我可以/robots.txt从任意站点加载其中任何一个吗?有没有其他方法可以访问其他域上的这个文件?

4

4 回答 4

3

您可以使用其中任何一个加载它,只是无法将数据提供给 JavaScript。这就是同源政策的重点。

如果您想从任意站点获取任意数据,则需要在服务器端进行。

于 2013-08-04T19:06:39.003 回答
1

要绕过同源策略,您需要控制主机站点并设置允许来源(此处不是选项),或者通过 JavaScript 以外的方法加载它(JSONP 会这样做;它作为标准脚本)。

这意味着您可以在 iframe 中显示 robots.txt,例如,只需设置其src属性即可。

如果你想在 JavaScript 中操作内容,那是行不通的(即使你在 iframe 中加载了内容,你仍然不能与之交互)。您的最终选择是设置代理。在您的服务器上有一个脚本,调用该脚本时将加载相关文件并重定向内容。这并不难,但意味着您的服务器将有更高的流量(并且您需要将其锁定,以免被恶意使用)。

于 2013-08-04T19:22:03.280 回答
1

iframe 不会让您查看内容。你可以把它展示给你的用户,但我猜你想用代码来分析它。


你可以在你的服务器上做。即使您只有一个/cors/robots/domain.tld处理程序(以及您需要访问的其他文件的其他处理程序)。如果对您的情况可行,这可能是最好的方法。


AnyOrigin是一项免费服务,允许您进行跨域请求。

$.getJSON('http://anyorigin.com/get?url=google.com/robots.txt&callback=?', function(data){
    console.log(data.contents); // contents of Robots.txt
});
于 2013-08-04T19:42:14.450 回答
0

很确定这可以通过 Chrome 运行禁用 Same Origin Policy 的浏览器:Disable same origin policy in Chrome

在浏览器的上下文之外做这样的事情可能会更好,但是,在命令行上可能使用像 CURL 之类的东西?

于 2013-08-04T19:15:50.497 回答