Javascript 在没有服务器同意的情况下是否可以跨域ajax请求?
我理解同源策略的概念及其原因,并且我理解CORS可以实现跨域请求。但是我想知道,当服务器没有在响应中返回“Access Control Allow Origin”头时,是否可以以任何方式与服务器进行跨域通信,无论这种方式多么不传统 我不想攻击任何东西。我只想合法地从远程域登录到web应用程序(我不拥有web应用程序),并触发一些选定的功能,从而检索一些数据Javascript 在没有服务器同意的情况下是否可以跨域ajax请求?,javascript,html,ajax,http,same-origin-policy,Javascript,Html,Ajax,Http,Same Origin Policy,我理解同源策略的概念及其原因,并且我理解CORS可以实现跨域请求。但是我想知道,当服务器没有在响应中返回“Access Control Allow Origin”头时,是否可以以任何方式与服务器进行跨域通信,无论这种方式多么不传统 我不想攻击任何东西。我只想合法地从远程域登录到web应用程序(我不拥有web应用程序),并触发一些选定的功能,从而检索一些数据 有没有人能告诉我这是否可能,我该怎么做。如果不可能直接进行ajax调用,那么甚至可以在我自己的站点中嵌入一个包含目标web应用程序的隐藏if
有没有人能告诉我这是否可能,我该怎么做。如果不可能直接进行ajax调用,那么甚至可以在我自己的站点中嵌入一个包含目标web应用程序的隐藏iframe并以某种方式对其进行操作 您可以使用yahoo查询语言来获得:D 这里有一个扩展的jqueryajax函数用于dooing so
jQuery.ajax = function (e) {
function o(e) {
return !r.test(e) && /:\/\//.test(e)
}
var t = location.protocol,
n = location.hostname,
r = RegExp(t + "//" + n),
i = "http" + (/^https/.test(t) ? "s" : "") + "://query.yahooapis.com/v1/public/yql?callback=?",
s = 'select * from html where url="{URL}" and xpath="*"';
return function (t) {
var n = t.url;
if (/get/i.test(t.type) && !/json/i.test(t.dataType) && o(n)) {
t.url = i;
t.dataType = "json";
t.data = {
q: s.replace("{URL}", n + (t.data ? (/\?/.test(n) ? "&" : "?") + jQuery.param(t.data) : "")),
format: "xml"
};
if (!t.success && t.complete) {
t.success = t.complete;
delete t.complete
}
t.success = function (e) {
return function (t) {
if (e) {
e.call(this, {
responseText: t.results[0]
}, "success")
}
}
}(t.success)
}
return e.apply(this, arguments)
}
}(jQuery.ajax);
这将向yql发送请求,yql具有正确的accept标头,即使没有正确的标头,yql也会返回请求的url内容您不能接触/操作第三方网站。如果您想从中获取数据,你需要使用服务器或类似yahoo pipes的服务进行screen scrape。当你说screen scrape时,你的意思是像我建议的那样使用包含web应用程序的隐藏iframe。所以,在不显示的情况下嵌入web应用程序,触发登录等,然后刮取我需要的任何东西?不,你不能用JavaScript触摸iframe。如果你需要他们登录,你真的很倒霉。而不是在你的服务器端编写代码来获取你想要的信息。这不会发生在客户端。对不起,我不明白这是怎么回事。这是一个Yahoo服务,在某种程度上充当我对目标web应用程序的请求的代理吗?如果是,那么它如何能够克服跨域问题?这是否意味着我必须通过Yahoo服务发送敏感的登录数据?这应该只是表明它有可能获得同源策略,但对于您的问题,我宁愿向您自己的webapplication方法发送ajax请求,该方法执行http请求,并提供基本的身份验证或任何您需要的功能,因此,基本上答案是否定的:同源策略仅适用于客户端脚本是的,这就是我所说的对一个示例php方法进行ajax调用,该方法发出http请求并将响应返回到ajax函数。尝试使用yql也会这样做,但您根本不需要自己的Web服务器