亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源軟件測試解決方案 >
跨域訪問的解決方案
作者:網絡轉載 發布時間:[ 2013/12/12 9:23:24 ] 推薦標簽:

跨域訪問一直是困擾很多開發者的問題之一。因為涉及到安全性問題,所以跨域訪問默認是不可以進行的,否則假設我寫了一段js去更改google的圖標,明天他寫了一段代碼去吧google首頁的文字全部變成梵文,那還得了?

首先,講下什么是相同的域。域是這樣定義的,協議名+host名+端口號,只有這3個都一樣,才能說是同樣的域,同樣的域里面的訪問不受到同源策略限制,你可以用你的js代碼任意的去操作資源,但是不同域你不能這樣做了。

解決跨域訪問有很多方法,常見的一種“單向”跨域訪問方式是用JSONP(Json with Padding),它解決思路是如果域A (充當客戶端)上的js 要操作域B(充當服務器端)上的資源,那么只要吧域A上的js函數名傳遞給域B,然后在域B進行封裝,它解析來自域A的函數名,并且將域B上的資源轉為json對象,并且兩者進行組合,組合后的字符串是 域A函數名(域B json對象) 這種函數調用的形式,然后當域A上用script src='#'" >域A函數名(域B json對象)的形式,于是達到了域A函數處理域B資源的效果。

為了更有說服力,我們這里做一個非常簡單的實驗,假定域A(客戶端)有個應用部署在http://localhost:8180上,域B(服務器端)有個應用部署在http://localhost:8080上,顯然這2個域由于端口不同,所以域A如果要訪問域B必定是跨域訪問的。域A 有一段js函數,域B提供了一個json對象,我們想要域A的js函數操作域B的json對象。會怎樣呢?

服務端(我們部署在http://localhost:8080上):

先貼上域B(服務器端的代碼),它用一個java servlet,負責接收來自客戶端的帶回調函數名參數的請求,并且與自己端提供的json對象包裝,包裝為一個jsonp后然后放入響應輸出流。

    package com.charles.jsonp;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.json.simple.JSONObject;
    
    /**
     * Servlet implementation class JSONPServlet
     */
    public class JSONPServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public JSONPServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            
            //get the callback function which comes from client
            String callbackFuncFromClient= request.getParameter("callbackFunc");
            //create a json object
            JSONObject jsonInfo = new JSONObject();
            jsonInfo.put("name","charles");
            jsonInfo.put("title", "technical lead");
            jsonInfo.put("info","talent man");
            //create a string which stands for a javascript with the format func(jsonobject)
            StringBuffer jsonpString = new StringBuffer();
            jsonpString.append(callbackFuncFromClient).append("(").append(jsonInfo.toJSONString()).append(")");
            
            
            //construct the output jsonp and output to the client
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            out.println(jsonpString);
            out.flush();
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
        }
    
    }

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 亚洲欧美久久婷婷爱综合一区天堂 | 天天做天天爱天天怼 | 亚洲va久久久久 | 中文字幕在线一区 | 精品99视频 | 99福利视频 | 最近中文字幕2019高清8? | 亚洲精品人成网线在线 | 另类视频在线观看 | 91精品成人 | 无遮挡动漫黄漫网站在线观看 | 日韩成人中文字幕 | xxxx国产片| 欧美日韩三级在线 | 日日射视频 | 在线免费视频一区 | 97狠狠| 最近中文字幕视频 | 欧美白人最猛性xxxxx | 久久免费大片 | 黄色网一级片 | a级精品九九九大片免费看 a级精品国产片在线观看 | 人人天天夜夜 | 亚洲狠狠插 | 香蕉福利 | 日日摸夜夜摸狠狠摸日日碰夜夜做 | 看黄视频在线观看 | a一级免费视频 | 黄色短视频免费看 | 日日操夜夜操免费视频 | 午夜爽爽视频 | 在线观看啊啊啊 | 五月天激情婷婷婷久久 | 精品国产人成亚洲区 | 人人草人人澡 | 日韩精品在线一区 | 日本亚洲欧美在线 | 日本国产最新一区二区三区 | 成人性一级视频在线观看 | 成人国产片免费 | 日韩精品特黄毛片免费看 |