如果服务器端代码托管在不同的域上,ajax会运行吗

Will ajax run if server side code is hosted on a different domain?

本文关键字:ajax 运行 代码 服务器端 如果      更新时间:2023-09-26

我打开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

不,不会。这是经过设计的(同源策略),旨在防止跨站点脚本攻击。

如果你真的必须这样做,你可以使用JSONP绕过它,但不建议这样做,因为你可能会允许另一个网站(即使你信任网站管理员,也可能被攻击者入侵)对登录用户的数据为所欲为。

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

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

在服务器站点中,您必须将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=aurl进行ajax调用。If and ony If http://xyz.com?x=a url的响应标头中有一个Access-Control-Allow-Origin字段,其中包含您的域名或'*'。