spring mvc跨域問題


  最近做一個微信小項目遇到一個跨域問題,就是我的前端和后端是放在不同的服務器上的,然后使用opst請求的時候

報錯。之前我是沒有了解過跨域這個問題的,然后我就上網去查了很多資料,看也很多人寫的跨域的博客,然后完成了跨域的問題。

 

一、什么是跨域:

    跨域是指 不同域名之間相互訪問 例如 我的電腦上有2個服務器 192.168.0.11 192.168.0.12 如果第一個服務器上的頁面要訪問第二個服務器 就叫做跨域 或者http://www.baidu.com 要訪問http://www.xxx.com 也是不同域名 也是跨域 。傳統的Ajax請求只能獲取在同一個域名下面的資源,但是HTML5打破了這個限制,允許Ajax發起跨域的請求。瀏覽器是可以發起跨域請求的,比如你可以外鏈一個外域的圖片或者腳本。但是Javascript腳本是不能獲取這些資源的內容的,它只能被瀏覽器執行或渲染。主要原因還是出於安全考慮,瀏覽器會限制腳本中發起的跨站請求。跨域的解決方案有多中JSONP、Flash、Iframe等,當然還有CORS(跨域資源共享,Cross-Origin Resource Sharing)今天就來了解下CORS的原理,大家如果想了解CORS詳解可以去 http://www.ruanyifeng.com/blog/2016/04/cors.html

二、CORS瀏覽器支持情況如下圖:

 

因為我用的是Spring MVC,所以也是用Spring MVC做例子。

  Spring MVC 從4.2版本開始增加了對CORS的支持,在spring MVC 中增加CORS支持非常簡單,可以配置全局的規則,也可以使用@CrossOrigin注解進行細粒度的配置。

  使用@CrossOrigin注解

  首先在自己Controller那里打上一個注解就可以了

  @CrossOrigin(origins = "http://www.xxx", maxAge = 3600,methods={RequestMethod.POST}) @RequestMapping(value="/getPlateAll") @ResponseBody public Object getPlateAll(){ Map<String,Object> map = new HashMap<String,Object>(); List<PageData> list=null; try{ list=plateService.getPlateAll(null); }catch (Exception e){ logger.error(e.toString(),e); } map.put("list",list); return AppUtil.returnObject(new PageData(), map); }

像上面代碼塊紅色的就是跨域的注解,也可以把它寫在Controller頭上,默認情況下所有的域名和GET、HEAD和POST方法都是允許的。上面代碼塊我加了粉紅的注解大家都知道干嘛的,我把它加上顏色是因為我做的時候沒有寫上這個注解,

然后就報我404的錯誤,希望大家引以為戒。還有很多方法,我覺得這個是最方便的,所以就寫下來了。其它的還沒有時間去研究,以后有空回去研究下然后寫出來給大家看。

 

頁面的ajax就是平常的就行了,下面是我的簡單ajax

 1 function dianzan(cid){
 2             $.ajax("http://qcdqkj.tunnel.qydev.com/qcdqkj/appthumb/thumbByUserIdandCirclesId", {
 3                 type: "POST",
 4                 data: {
 5                     C_ID: cid
 6                 },
 7                 success: function() {
 8                     //成功10                 }
11             });
12         }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM