<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • Http訪問跨域解決

          2018-3-23    seo達(dá)人

          如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點(diǎn)這里

          一、跨域科普

          跨域,即跨站HTTP請求(Cross-site HTTP request),指發(fā)起請求的資源所在域不同于請求指向資源所在域的HTTP請求。

          二、如何產(chǎn)生跨域

          當(dāng)使用前后端分離,后端主導(dǎo)的開發(fā)方式進(jìn)行前后端協(xié)作開發(fā)時,常常有如下情景:

              a、后端開發(fā)完畢在服務(wù)器上進(jìn)行部署并給前端API文檔。
              b、前端在本地進(jìn)行開發(fā)并向遠(yuǎn)程服務(wù)器上部署的后端發(fā)送請求。
              c、在這種開發(fā)過程中,如果前端想要一邊開發(fā)一邊測試接口,就需要使用跨域的方式。

          三、解決方案

          1、JQuery+ajax+jsonp 跨域訪問

          Jsonp(JSON with Padding)是資料格式 json 的一種“使用模式”,可以讓網(wǎng)頁從別的網(wǎng)域獲取資料。

          下面給出例子:

          html 前端代碼:

          [html] view plain copy
          1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">    
          2. <html>    
          3. <head>    
          4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    
          5. <title>Insert title here</title>    
          6. <script type="text/javascript" src="resource/js/jquery-1.7.2.js"></script>    
          7. </head>    
          8. <script type="text/javascript">    
          9. $(function(){       
          10.  /*    
          11.  //簡寫形式,效果相同    
          12.  $.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?",    
          13.          function(data){    
          14.              $("#showcontent").text("Result:"+data.result)    
          15.  });    
          16.  */    
          17.  $.ajax({    
          18.      type : "get",    
          19.      async:false,    
          20.      url : "http://app.example.com/base/json.do?sid=1494&busiId=101",    
          21.      dataType : "jsonp",//數(shù)據(jù)類型為jsonp    
          22.      jsonp: "jsonpCallback",//服務(wù)端用于接收callback調(diào)用的function名的參數(shù)    
          23.      success : function(data){    
          24.          $("#showcontent").text("Result:"+data.result)    
          25.      },    
          26.      error:function(){    
          27.          alert('fail');    
          28.      }    
          29.  });     
          30. });    
          31. </script>    
          32. <body>    
          33. <div id="showcontent">Result:</div>    
          34. </body>    
          35. </html>    

          服務(wù)器端:

          [java] view plain copy
          1. import java.io.IOException;    
          2. import java.io.PrintWriter;    
          3. import java.util.HashMap;    
          4. import java.util.Map;    
          5. import javax.servlet.http.HttpServletRequest;    
          6. import javax.servlet.http.HttpServletResponse;    
          7. import net.sf.json.JSONObject;    
          8. import org.springframework.stereotype.Controller;    
          9. import org.springframework.web.bind.annotation.RequestMapping;    
          10.      
          11. @Controller    
          12. public class ExchangeJsonController {    
          13.  @RequestMapping("/base/json.do")    
          14.  public void exchangeJson(HttpServletRequest request,HttpServletResponse response) {    
          15.     try {    
          16.      response.setContentType("text/plain");    
          17.      response.setHeader("Pragma""No-cache");    
          18.      response.setHeader("Cache-Control""no-cache");    
          19.      response.setDateHeader("Expires"0);    
          20.      Map<String,String> map = new HashMap<String,String>();     
          21.      map.put("result""content");    
          22.      PrintWriter out = response.getWriter();         
          23.      JSONObject resultJSON = JSONObject.fromObject(map); //根據(jù)需要拼裝json    
          24.      String jsonpCallback = request.getParameter("jsonpCallback");//客戶端請求參數(shù)    
          25.      out.println(jsonpCallback+"("+resultJSON.toString(1,1)+")");//返回jsonp格式數(shù)據(jù)    
          26.      out.flush();    
          27.      out.close();    
          28.    } catch (IOException e) {    
          29.     e.printStackTrace();    
          30.    }    
          31.  }    
          32. }    

          2、通過注解的方式允許跨域

          在Controller類或其方法上加@CrossOrigin注解,來使之支持跨域。

          舉例:
          [java] view plain copy
          1. @CrossOrigin(origins = "*", maxAge = 3600)  
          2. @RestController  
          3. @RequestMapping("/User")  
          4. public class UserController {  
          5. }  

          其中origins為CrossOrigin的默認(rèn)參數(shù),即跨域來源,*即任何來源,也可以是其他域名。即可以以以下形式:

          [java] view plain copy
          1. @CrossOrigin("http://test.com")  
          2. @CrossOrigin(origins="http://test.com",maxAge=3600)  

          該注解用于方法上,寫法相同,處理時,SpringMVC會對類上標(biāo)簽和方法上標(biāo)簽進(jìn)行合并。

          3、通過配置文件的方式允許跨域

          在web.xml中添加如下配置:

          [html] view plain copy
          1. <filter-mapping>   
          2.     <filter-name>CorsFilter</filter-name>   
          3.     <url-pattern>/*</url-pattern>   
          4. </filter-mapping>  
          使用這個Filter即可讓整個服務(wù)器全局允許跨域。

          藍(lán)藍(lán)設(shè)計m.sdgs6788.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)


          日歷

          鏈接

          個人資料

          存檔

          超级97碰碰碰碰久久久久最新| 久久精品无码专区免费| 狠狠色伊人久久精品综合网 | 久久精品国产亚洲77777| 色综合久久最新中文字幕| 看全色黄大色大片免费久久久| 亚洲精品国精品久久99热一| 久久国产免费直播| 久久99精品国产麻豆| 7777精品久久久大香线蕉| 日韩乱码人妻无码中文字幕久久| AV色综合久久天堂AV色综合在| 亚洲嫩草影院久久精品| 香蕉久久一区二区不卡无毒影院| 欧美亚洲色综久久精品国产| 精品久久一区二区三区| 亚洲日本va午夜中文字幕久久| 久久久九九有精品国产| 久久综合给久久狠狠97色| 中文成人无码精品久久久不卡| 国产成人综合久久综合| 久久成人精品视频| 女人香蕉久久**毛片精品| 精品国产青草久久久久福利 | 香蕉aa三级久久毛片| 久久婷婷色综合一区二区| 久久久久久毛片免费看| 久久婷婷国产麻豆91天堂| 久久亚洲AV成人出白浆无码国产| 久久人人爽人人爽AV片| 99久久精品免费国产大片| 久久99国产精品久久| 久久永久免费人妻精品下载| 国产成年无码久久久免费| 日韩十八禁一区二区久久| 国产精品欧美亚洲韩国日本久久| 99国产欧美精品久久久蜜芽 | 久久久无码精品午夜| 伊人丁香狠狠色综合久久| 国产亚洲婷婷香蕉久久精品| 97久久精品无码一区二区天美|