日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【springboot】【若依(ruoyi)】@RestController 接口跨域请求

發(fā)布時間:2024/9/19 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【springboot】【若依(ruoyi)】@RestController 接口跨域请求 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

  • springboot 2.1.1.RELEASE
  • 360極速瀏覽器 12.0.1476.0 (正式版本) (32 位)
  • jquery 3.5.0
  • 接口跨域請求有兩者方式:
    • jsonp
    • CORS

JSONP

JSONP(JSON with Padding)是利用瀏覽器對script的資源引用沒有同源限制,通過動態(tài)插入一個script標簽,當資源加載到頁面后會立即執(zhí)行的原理實現(xiàn)跨域的。

JSONP是一種非正式傳輸協(xié)議,具體做法是:用戶傳遞一個callback參數(shù)給服務端。服務端返回數(shù)據(jù)時用callback參數(shù)包裹住JSON數(shù)據(jù),形如callback({name:'zhangsan',age:18})。

JSONP只支持GET請求(不支持POST等其它類型的HTTP請求),它只支持跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進行JavaScript調用的問題。

JSONP的優(yōu)勢在于支持老式瀏覽器,弊端也比較明顯:需要客戶端和服務端定制進行開發(fā)。

CORS

Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定義了在跨域訪問資源時瀏覽器和服務器之間如何通信。CORS背后的基本思想是使用自定義的HTTP頭部允許瀏覽器和服務器相互了解對方,從而決定請求或響應成功與否。

CORS的具體做法為:瀏覽器發(fā)現(xiàn)請求不符合同源策略時,給請求加一個請求頭Origin。服務端如果接受請求則在返回結果中加入一個響應頭Access-Control-Allow-Origin。

CORS與JSONP的使用目的相同,但是比JSONP更強大。CORS支持所有的瀏覽器請求類型,承載的請求數(shù)據(jù)量更大(因為URL是有長度限制的,參考這里。以目前的技術看,URL沒有長度限制,那是不可想象的)。

CORS也不是萬能的,老舊的瀏覽器就不支持。

CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)。下面的方法只在簡單請求下做了測試。

springboot 啟用 @CrossOrigin

springboot很貼心的提供了不同粒度的控制。這里介紹全局設置。

  • 添加注解@CrossOrigin

    @CrossOrigin(origins = {"*"}) @SpringBootApplication public class Application { ... }

    說明:origins 不建議使用*(為了方便這里用*。實際應用時,老老實實的一個一個的添加)。

  • addCorsMappings

    @Configuration public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**");}}
  • 測試
    測試代碼略。
    Http 請求如下(http://localhost:8085/api/sample/form/get1):

    GET /api/sample/form/get1 HTTP/1.1 Host: localhost:8085 Connection: keep-alive Accept: */* Origin: null User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 Sec-Fetch-Site: cross-site Sec-Fetch-Mode: cors Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9

    Http 響應如下:

    HTTP/1.1 200 Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Access-Control-Allow-Origin: * Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Fri, 04 Sep 2020 06:09:46 GMT
  • 參考

    https://www.cnblogs.com/banning/p/6250677.html
    https://zhuanlan.zhihu.com/p/38972475
    https://www.cnblogs.com/zhaosq/p/10529803.html

    總結

    以上是生活随笔為你收集整理的【springboot】【若依(ruoyi)】@RestController 接口跨域请求的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。