跨域名訪問--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

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com