当前位置: 首页 > 面试题库 >

即使document.domain设置正确,跨子域ajax请求也被拒绝

马梓
2023-03-14
问题内容

在我的应用程序中,我在一个子域(dev.u413.com)上有一个网站,并且我使用jQuery向另一个子域(api.u413.com)的JSON
api提出了ajax请求。当我在Chrome开发工具和Firefox Firebug中检查请求时,似乎阻止了我的请求Access-Control- Allowed-Origin。我设置document.domain为当前域的后缀:document.domain = 'u413.com';

这是我的要求:

    $.ajax({
        dataType: 'json',
        data: { parseAsHtml: true, cli: 'help' },
        url: 'http://api.u413.com/',
        success: function (response) {
            alert(response.Command);
        }
    });

如果我将ajax请求修改为在同一域中,则请求成功。

    $.ajax({
        dataType: 'json',
        crossDomain: false,
        data: { parseAsHtml: true, cli: 'help' },
        url: 'http://dev.u413.com/',
        success: function (response) {
            alert(response.Command);
        }
    });

为什么会这样?浏览器不应该抱怨跨域问题,因为我document.domain根据相同来源策略的指南设置了两个子域的通用后缀。

我的应用当前正在使用jsonp,但是我觉得正确的ajax请求应该按照我上面链接的相同原始策略工作。如果不需要,我宁愿不使用jsonp。是否无法跨子域发出常规的ajax请求?


问题答案:

document.domain不适用于AJAX。它旨在用于跨域iframe和窗口通信。在您的情况下,您违反了相同的原始策略(表的最后一行),因此您需要使用JSONP或服务器端网桥。

这是一个很好的指南,它说明了用于实现跨域AJAX请求的不同技术。



 类似资料:
  • 问题内容: 我有两个文件domain.com/test2.php: 和domain.com/test3.php: 在这种情况下,domain.com/test2.php的输出 与您期望的一样,但是现在让我们说我想在一个子域中创建一个test2.php。为了阻止跨域脚本编写问题,我将在sub.domain.com/test2.php的开头添加以下额外的行: 此额外的行阻止了跨域错误的显示,但是现在该

  • 问题内容: 这是我的代码: 我的回应是: 500服务器错误 我打开我的变量,然后看到: POST / rest / platform / domain / list HTTP / 1.1 即使我曾经将其设置为GET,为什么也将其设置为POST ? 问题答案: 将请求方法隐式设置为POST,因为这是您要发送请求正文时的默认方法。 如果要使用GET,请删除该行并删除该行。您无需发送GET请求的请求正文

  • 问题内容: 如何通过Ajax从远程URL获取内容? jQuery ajax请求被阻止,因为跨域 控制台日志 跨域请求被阻止:“相同源策略”不允许读取http://www.dailymotion.com/embed/video/x28j5hv上的远程资源。(原因:CORS标头“ Access-Control-Allow-Origin”缺失)。 跨域请求被阻止:“相同源策略”不允许读取http://w

  • 问题内容: 因此,我有了这个Go http处理程序,该处理程序将一些POST内容存储到数据存储中,并检索其他一些信息作为响应。在后端,我使用: 在我的firefox OS应用程序中,我使用: 传入的部分都一直如此。但是,我的回复被阻止了。给我以下信息: 我尝试了许多其他操作,但是无法从服务器获得响应。但是,当我将Go POST方法更改为GET并通过浏览器访问该页面时,我得到的数据太糟糕了。我无法真

  • 问题内容: 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展。 我在脚本顶部仅添加了以下两行,以使它们能够做到: 现在我的问题是:这里是否遗漏了任何安全方面的考虑?这个简单的解决方案会带来严重的问题吗? 如果是这样,什么是更好的解决方案? 感谢您的回复。 问题答案: 如上所述,任何人都可以随时向您的页面发送请求:因此,您需要考虑的主

  • 问题内容: 如何使用XDomainRequest正确重写Ajax请求以使其在IE 8 +中工作? 问题答案: 将此插件用于IE8-9 Xdomain支持。 https://github.com/MoonScript/jQuery-ajaxTransport- XDomainRequest