簡體   English   中英

如果服務器端代碼托管在其他域上,ajax是否會運行?

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

我打開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-OriginResponse 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調用。 如果且僅是http://xyz.com?x=a的響應標頭包含帶有您的域名或“ *”的Access-Control-Allow-Origin字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM