zoukankan      html  css  js  c++  java
  • 该页正在访问其控制范围之外的数据。这有些危险。是否继续?

    最近做个发帖时把帖子信息发送一份到服务器上的功能。最先想到用ajax异步方式来实现,
    JS代码如下:
    function AsyncPost(strurl,strpost)

       //xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
       var xml = new ActiveXObject("Microsoft.XMLHTTP"); 
       xml.open("POST",strurl,false);//使用POST方法打开一个到服务器的连接,以异步方式通信 
       xml.setrequestheader("content-length",strpost.length); 
       xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
       xml.send(strpost);//发送数据 
       var res = xml.responseText;//接收服务器返回的数据 
       //document.write(res);
       if(res=="Y") 
       { 
          alert("发表成功!"); 
          window.location.href('AddNoteXMLHTTP.aspx'); 
       } 
       else 
          alert("发表失败!"); 
       xml=null;
    }

    可是在点击“发表”按钮时,提示“该页正在访问其控制范围之外的数据。这有些危险。是否继续?”,偶的机子系统是Windows 2000,在我同事装有Windows 2003的机子上,连这个提示都没了,直接报脚本错误,“没有权限”。
    在网上搜索了好多资料,有下列3种解决方案:
    1、跨浏览器安全性是浏览器根据区域设定的安全权限。
    在子域的情况下,通过设置document.domain属性,可以截掉域名所匹配的一部分内容,例如:在一个来自http://www.myisp.com/dave的脚本中,我们向脚本中添加上一行:
      document.domain='myisp.com';
    这将允许这个脚本和来自子域http://dave.myisp.com/的脚本进行交互,假设那个脚本也设置了document.domain的值。然而,不可能将document.domain设置为任意值,例如:www.google.com。
    或者
    在IE里面设置,工具->Internet选项->安全->受信任的站点,添加服务器端的网站。

    2、客户端的xmlhttpReqest不能加载其它的站点数据,只能用服务器端来做,方法是一样的。
    此方法我有做一些尝试,在客户端改为server.createObject("Msxml2.XMLHTTP"),提示“server未定义”脚本错误。若放在服务器端,要如何做?有哪位高手可以指点一下?

    <%
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    xmlHttp.open "GET","http://www.asdf/4152314.xml",false;
    xmlHttp.send();
    xmldoc = xmlHttp.responseXML
    %>
    其中的xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 改为 xmlhttp = server.createObject("Msxml2.XMLHTTP")

    3、浏览器的安全性设置不允许站点页面中的XMLHttpRequest请求其它站点的内容。不过通过构造IFrame应该可以做到。(偶没有测试过)

    最后,绕开上述思想,用System.Net.HttpWebRequest 类来实现,代码如下:
       //WebSite为服务器接收页面url,strQuery为数据参数队列
       Encoding encoding = Encoding.UTF8;
       byte[] data = encoding.GetBytes(strQuery);   
       // 准备请求...
       HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(WebSite);
       myRequest.Method = "POST";
       myRequest.ContentType="application/x-www-form-urlencoded";
       myRequest.ContentLength = data.Length;
       Stream newStream=myRequest.GetRequestStream();
       // 发送数据
       newStream.Write(data,0,data.Length);
       newStream.Close();

    这样也就可以绕开上述的棘手问题了。希望对大家有所帮忙。


  • 相关阅读:
    MyBatis的缓存
    16年随笔
    linux 随笔
    Linux下启动Tomcat启动并显示控制台日志信息
    linux 连接工具
    Linux Tomcat重新启动
    SpringMVC 文件上传 MultipartFile
    spring @component
    mysql转型
    MyBatis传入参数
  • 原文地址:https://www.cnblogs.com/huazai8204/p/763636.html
Copyright © 2011-2022 走看看