zoukankan      html  css  js  c++  java
  • 跨域名访问ajax、java及Firefox的安全性

    昨天,和果子讨论跨域名访问的问题,
    果子说通过js和ajax不能进行跨域名访问,
    但是我记得曾经做过一个小的页面程序,直接通过ajax访问页面并得到返回值,所以就试验了下。
     
    简单说,自己做的某web程序访问非本程序所在域名的页面数据,
    比如,需要访问http://www.xxxx.com/aaa.jsp,并向其发送参数,然后得到返回值。
     
    发现,在IE下,直接通过ajax即可,无所谓特定方式。在IE6和IE7 下均可。
    但firefox由于其自身的安全设置,是禁止类似访问的。
    应该是Firefox得到对象数据包后,进行解析时发现与当前网站的域名设置不同,于是抛出异常,禁止访问。
    查找了下相应资料,发现有些js框架推出了一些相应的解决方法,试验了下,有的还是有些问题。
    总结了下,页面程序要兼容多种浏览器情况下,大致有以下几种解决方式:
    1、判断浏览器型号及版本,如果是Firefox更改其安全设置,然后增加代码屏蔽安全性检查。
    具体实现网上有,有兴趣的可以baidu下。
    个人觉得这是馊主意:web程序本身就是为了人们省掉安装的麻烦,现在要调安全设置,将人的浏览器安全性降低。
    强力不推荐。
    2、目标页面数据封装为json格式
    jQuery提供了一个方法,getJSON。测试了下,这个方法可以在IE和Firefox都可以得到数据。
    但是有个问题,就是目标页面提供的数据必须为json格式,不然无法解析。大致实现如下:
    $.getJSON("http://www.xxxx.com/aaa.jsp?callback=?",
     {para1:"L",para2:"duoduo"},
     function (data){
      //this; 
     }
     );
    据说getScript方法也可以,不过没试。
    3、最简单方便也最不会出问题的方法,由java程序将目标地址和数据发目标地址。
    这样不会有什么安全性问题出现了就,跟浏览器也没什么业务关系了。变浏览器直接发送到目标地址 为 服务器中转发送。
    java的网络操作还是很方便很强大的。
    大致实现如下:
    建立一个连接,URLConnection
    URL url=new URL("http://www.xxxx.com/aaa.jsp");
    conn = url.openConnection();
    调用setDoOutput方法,建立输出连接
    conn.setDoOutput(true);
    然后调用getOutputStream方法,以便获得数据流。这个属于java特色了,什么输入输出的玩艺它都当作流。
    一般会有参数,用PrintWriter。
    PrintWriter out=new PrintWriter(conn.getOutputStream());
    out.print("para1=L&para2=duoduo");//这行是参数
    最后关闭连接就Ok了,out.close()。
    往下读取数据就是通过BufferReader来进行服务器返回数据的读取了。具体的不写了,太常用了。
    java向服务器发送数据和读取应答,都是作为流来处理,相对比较方便,但别忘记操作这些东西需要关注exception。
     
    最后一条其实是最简单方便的实现,
    开始走进死胡同了,一直在想js是否能解决,忘记了java的直接实现。
    直到快下班时候才突然想起来。
    xx啊xx
  • 相关阅读:
    CF991D Bishwock
    CF1010D Mars rover
    NOIP 2011 计算系数
    SDOI 2008 仪仗队
    浅谈欧拉函数
    CF1249F Maximum Weight Subset
    NOIP 2011 铺地毯
    CF707D Persistent Bookcase
    C++ STL bitset 容器详解
    CF798D Mike and distribution
  • 原文地址:https://www.cnblogs.com/songyanlei/p/2975473.html
Copyright © 2011-2022 走看看