【问题标题】:Will ajax run if server side code is hosted on a different domain?如果服务器端代码托管在不同的域上,ajax 会运行吗?
【发布时间】:2012-03-01 11:24:04
【问题描述】:

我打开了 Firefox 的暂存器并输入了...

function ajaxRequest()
{
var xmlhttp;
var domainName = location.host;
var url = 'http://leke.dyndns.org/cgi/dn2ipa/resolve-dns.py?domainName=';
url = url + domainName + '&x=' + Math.random(); // x= to avoid browser caching;

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    alert(domainName+'='+xmlhttp.responseText);
    }
  }
xmlhttp.open("GET",url,true);
xmlhttp.send();
}

ajaxRequest();

我的 ajax 代码为什么在与远程脚本 (http://leke.dyndns.org) 相同的域中工作,但在其他域中不工作(如 http://stackoverflow.com)?

如果有帮助,这里是 cgi 方面...

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os, cgi, cgitb, socket
cgitb.enable()

cgiData = cgi.FieldStorage() # Domain Name
domainName = cgiData.getvalue('domainName')
ipa = socket.gethostbyaddr(domainName)
sendIpa = ipa[2][0]

print 'Content-Type: text/html;charset=utf-8'
print ""
print sendIpa

【问题讨论】:

标签: javascript ajax


【解决方案1】:

不,不会。这是设计使然(same origin policy),旨在防止cross site scripting 攻击。

如果你真的需要,你可以使用JSONP 绕过它,但不建议这样做,因为你可能会允许另一个网站(即使你信任网站管理员也可能被攻击者入侵)做任何他们喜欢的事情登录用户的数据。

【讨论】:

    【解决方案2】:

    在正常情况下是做不到的。但是如果服务器端代码托管在不同的域上,则可以运行

    要实现这一点,您必须进行以下服务器站点更改:

    在服务器站点中,您必须将 Access-Control-Allow-Origin 设置为 Response Header

    Access-Control-Allow-Origin : * //all other domain can access
    
    or 
    
    Access-Control-Allow-Origin : <your_domain_name> // only your domain can access
    

    检查:https://developer.mozilla.org/en/http_access_control

    [示例]

    您可以从不同的域对http://xyz.com?x=a url 进行成功的ajax 调用。 if 且仅当 http://xyz.com?x=a url 的响应标头具有带有您的域名或“*”的 Access-Control-Allow-Origin 字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-21
      • 2020-03-23
      • 2019-11-03
      • 2017-06-17
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多