【问题标题】:Cross-subdomain request跨子域请求
【发布时间】:2015-08-09 18:15:25
【问题描述】:

我需要进行跨子域请求。有一个经典的 asp 站点,它为我的 PL/SQL Oracle 网页创建了一个XMLHttpRequest

asp站点有域:test/site.asp,PL/SQL网页有域test:7779/site...所以顶级域是一样的

这是我的 XmlHttpRequest:

var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.onload = function() {
    if (xmlHttp.readyState === 4) {
        if (xmlHttp.status === 200) {
            createChart(divID, xmlHttp.responseText, counter);
        } else {
            console.error("error");
        }
    } 
};

xmlHttp.open( "GET", theUrl);
xmlHttp.setRequestHeader( "pragma", "no-cache" );
xmlHttp.send( null );

在 IE11 中没有出现错误,但在 Chrome 中:

XMLHttpRequest 无法加载 http://test:7779/site 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,不允许访问 Origin 'http://test'。 响应具有 HTTP 状态代码 501。

是否有解决跨子域请求的方法?也许在我的 asp 站点中使用 iframe 来获取内容?

更新:

我知道尝试将两边的document.domain 设置为相同:测试。但这也没有解决问题。

【问题讨论】:

  • 顶级域不一样,因为它们在不同的端口上运行,在顶级你有http://test:80http://test:7779,它们是不等价的。
  • 一种技术(也用于劫持页面)是注入一个<script src=".."></script> 标签,它将数据作为javascript脚本加载。但是随后您将不得不修改响应以充当 javascript 代码/函数(类似于 pjax)。请注意,这些技术也被用于劫持网站中的 JSON 响应
  • 1.停止设置自定义请求标头。这会强制进行预检请求。或 2. 让服务器在响应中发回适当的 Access-Control-Allow-Origin 标头
  • @Lankymart 在不同端口上运行意味着它们在完全不同的域上运行(根据请求)?

标签: javascript oracle asp-classic xmlhttprequest


【解决方案1】:

我的建议是,你为什么不使用 MSXML2.ServerXMLHTTP 对象,因为你手头有经典的 ASP?这样 XMLHttp 请求将从服务器发送到服务器,而不是从浏览器发送。

你可以这样使用,

Dim xmlhttp
  Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
  xmlhttp.setTimeouts 30,500,1000,1000
  xmlhttp.Open "GET", "http://yourlink" & time, false
  On Error Resume Next
  xmlhttp.Send
  If Err.Number Then
    getBBstatus = "Could Not Retrieve Data"
    Err.Clear
  Else
    getBBstatus = xmlhttp.ResponseText
   ' Do something with the response here
  End If
  On Error Goto 0
  Set xmlhttp = nothing

希望对你有帮助,谢谢。

【讨论】:

  • 我现在尝试使用此方法,但我想请求此页面,检查 cookie 设置(登录或未登录)。这似乎失败了,因为它将我转发到登录页面。任何想法如何防止这种情况?
  • 也就是说,你想请求你的子域只是为了检查用户是否已经登录?
  • 不,我想获取一些数据。但是这个数据只有在用户登录时才可用。登录似乎在这个请求中失败,仅供参考:请求的页面检查用户是否通过指定的 cookie 登录
  • 在这种情况下,您需要有一个单独的页面,该页面不会检查身份验证并响应数据,或者您可以在每次请求数据时提交登录凭据,该页面将检查凭据并验证请求。在这两种情况下,都必须更改目标页面。
猜你喜欢
  • 2021-09-11
  • 2017-06-15
  • 2013-12-03
  • 2013-03-06
  • 2019-12-01
  • 2015-01-17
相关资源
最近更新 更多