我希望能够使用JavaScript从各种网站访问/robots.txt
。这是一个侧面项目,测试网站的可用性,而不是所有这些都在我的控制之下。我试过这个:
$.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's page on Same-Origin-Policy表示可以使用某些元素嵌入内容,例如<script>
,<iframe>
<embed>
。我可以从任意网站加载/robots.txt
吗?有没有其他方法可以在其他域上访问此文件?
答案 0 :(得分:3)
您可以使用其中任何一个加载它,您将无法将数据提供给JavaScript。这是同源政策的重点。
如果您想从任意站点获取任意数据,则需要在服务器端执行此操作。
答案 1 :(得分:1)
要绕过相同的原始策略,您需要控制主机站点并设置allow-origin(此处不是选项),或者通过JavaScript以外的方法加载它(JSONP执行;它是作为标准脚本加载。)
这意味着您可以在iframe中显示robots.txt,例如,只需设置其src
属性。
如果你想操纵JavaScript中的内容,那将无法工作(即使你在iframe中加载内容,你仍然不允许与它进行交互)。您的最终选择是设置代理。在您的服务器上有一个脚本,在调用时将加载相关文件并重定向内容。这并不难,但意味着您的服务器将拥有更高的流量(并且您需要将其锁定以便不会被恶意使用)。
答案 2 :(得分:1)
iframes不会让你偷看内容。你可以向你的用户展示它,但我猜你想用代码分析它。
您可以在服务器上执行此操作。即使你只有一个/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
});
答案 3 :(得分:0)
非常确定Chrome可以通过在禁用同源策略的情况下运行浏览器来实现这一点:Disable same origin policy in Chrome。
最好在浏览器的上下文之外做这样的事情,但是在命令行上可能使用像CURL这样的东西?